Exemplo do GetImage: Demonstra a API do imagem do Windows Acquisition
O exemplo GetImage demonstra as interfaces de programação de aplicativo (APIs) do imagem do Windows Acquisition (WIA).
O conjunto de APIs WIA contém APIs simples para transferências de arquivos, mas não há nenhuma telefonar à API simples para transferências de memória.Obter imagem implementa uma função wrapper telefonar WiaGet imagem que combina a funcionalidade de SelectDeviceDlg, DeviceDlg e idtGetBandedData APIs para encapsular completamente imagem aquisição dentro de uma única telefonar de função.
O principal recurso do exemplo é o próprio código.Os arquivos WiaWrap, EventCallback, DataCallback, BitmapUtil e ProgressDlg mostram a forma correta de implementar as transferências de imagem na memória.A seção "Notas na programação com a WIA API" posteriormente neste resumo destaca armadilhas comuns ao escrever um aplicativo WIA, e o exemplo mostra como lidar com eles.Você pode ler esse exemplo sistema autônomo referência ou usar diretamente o código de exemplo sistema autônomo uma biblioteca.Uso de cada função é descrito detalhadamente em comentários do arquivo de cabeçalho.
Observação de segurança: |
---|
Este código de exemplo é fornecido para ilustrar um conceito e não deve ser usado em aplicativos ou sites da Web, pois ele não pode ilustrar sistema autônomo práticas de codificação mais seguras.Microsoft sistema autônomo sumes nenhuma responsabilidade por danos incidentais ou conseqüenciais deve o código de exemplo ser usado para fins diferentes de sistema autônomo se destina. |
Para obter exemplos e instruções para instalá-los:
Sobre o Visual Studio Ajuda menu, clicar Exemplos.
Para obter mais informações, consulte Localizando arquivos de exemplo.
A versão mais recente e a lista completa das Exemplos está disponível online a partir de O Visual Studio 2008 Exemplos página.
Você também pode localizar exemplos no disco rígido do seu computador.Por padrão, exemplos e um arquivo Leiame são copiados para uma pasta sob \programa Files\Visual Studio 9.0\Samples\.Para edições Express do Visual Studio, todos os exemplos estão localizados online.
Requisitos
Esse exemplo pode ser executado somente no Windows XP e posterior.
A Microsoft Windows SDK deve ser instalado.
Criando e executando o exemplo
Para compilação e executar esse exemplo
No Visual Studio, carrega a solução GetImage.sln.
No gerenciador de soluções, clicar com o botão direito do mouse no projeto e clique em Propriedades.Defina as seguintes propriedades:
C++ pasta, Geral propriedade página: modificar o Outros diretórios de inclusão propriedade para adicionar o diretório que contém o Windows SDK arquivos de cabeçalho (por exemplo, c:\Microsoft Windows SDK\include).
Vinculador pasta, Geral página de propriedades: modificar o Diretórios de biblioteca adicionais propriedade para adicionar o diretório que contém o Windows SDK arquivos de biblioteca (por exemplo, c:\Microsoft Windows SDK\lib).
From a Compilação menu, clicar Compilação.
From a Depurar menu, clicar Iniciar sem depuração.
O aplicativo de exemplo possui um único comando no seu Arquivo menu, chamado De scanner ou câmera.Quando estiver conectado a um dispositivo WIA (ou um emulador de dispositivo), o item de menu se torna ativado.Quando o usuário seleciona o comando de menu, o exemplo seqüencialmente exibirá os caixa de diálogo seleção de dispositivo WIA, caixa de diálogo seleção de imagem e caixa de diálogo transferência de imagem.As caixas de diálogo de seleção imagem e dispositivo são as caixas de diálogo comuns fornecidas pelo sistema e a caixa de diálogo de transferência é implementada neste exemplo.Finalmente, o exemplo exibirá imagens transferidas em janela(s) filho.
O exemplo de arquivos
File |
Descrição |
---|---|
WiaWrap.cpp |
Contém funções de wrapper para operações mais simples de WIA |
WiaWrap.h |
Arquivo de cabeçalho para WiaWrap.cpp |
EventCallback.cpp |
Implementa a função de retorno de chamada para eventos de dispositivo WIA |
EventCallback.h |
Arquivo de cabeçalho para EventCallback.cpp |
DataCallback.cpp |
Implementa a função de retorno de chamada para transferências de dados |
DataCallback.h |
Arquivo de cabeçalho para DataCallback.cpp |
BitmapUtil.cpp |
Contém funções do dispositivo independente DIB (bitmap) |
BitmapUtil.h |
Arquivo de cabeçalho para BitmapUtil.cpp |
ProgressDlg.cpp |
Implementa uma caixa de diálogo de progresso simples |
ProgressDlg.h |
Arquivo de cabeçalho para ProgressDlg.cpp |
GetImage.cpp |
Implementa o ponto de entrada principal para o aplicativo |
GetImage.rc |
Contém os recursos do projeto |
recurso.h |
Arquivo de cabeçalho para os identificadores de recurso |
MainWnd.cpp |
Implementa a janela do quadro principal |
MainWnd.h |
Arquivo de cabeçalho para MainWnd.cpp |
BitmapWnd.cpp |
Implementa uma janela de exibição de imagem |
BitmapWnd.h |
Arquivo de cabeçalho para BitmapWnd.cpp |
StdAfx.cpp |
Arquivo de cabeçalhos pré-compilados |
StdAfx.h |
Inclui os arquivos usados com freqüência padrão do sistema |
Observações sobre programação com a API WIA
É recomendável que aplicativos criar dispositivo e imagem seleção disponível por meio de um item de menu chamado "Do scanner ou câmera..." no menu "Arquivo".Este item pode ser cinza se não houver nenhum dispositivo WIA no sistema.
É recomendável que os desenvolvedores de aplicativos testam seus aplicativos com mesa e câmeras USB e serial com alimentação de rolo e scanners ADF.Além disso, os emuladores de dispositivo apenas para software disponível no Windows DDK podem ser usados para teste.
Scanners alimentadas rolar geralmente não sabem a altura da imagem quando a transferência de dados é iniciado, para que eles podem retornar 0 para o dimensionar da imagem e a altura da imagem no cabeçalho do bitmap.Nesse caso, a função de retorno de chamada deve poderá expandir seu buffer quando novos dados chegam e explicitamente devem calcular a altura quando a transferência for concluída.
Ao usar a API DeviceDlg no alimentador automático de documentos (ADF), a API definirá o ADF para digitalizar uma página.Se desejar várias páginas, o aplicativo deve conjunto explicitamente WIA_DPS_PAGES para o número de páginas, que ele solicita ou para o valor ALL_PAGES.
SelectDeviceDlg, DeviceDlg, idtGetData e idtGetBandedData APIs retorno S_FALSE se o usuário cancelar, portanto, não é suficiente para verificar o valor retornado com a macro teve êxito.O programador precisa verificar explicitamente S_FALSE.Da mesma forma, as APIs WriteMultiple e ReadMultiple retornam S_FALSE quando os argumentos da função estão corretos, mas a função não é possível executar a operação solicitada, portanto o programador precisa verificar explicitamente o valor retornado contra S_FALSE.
Se o aplicativo quer exibir uma caixa de diálogo de andamento que pode ser cancelada, ele deve exibir a caixa de diálogo em um thread separado.O segmento de transferência de dados será bloqueado até que a transferência seja concluída, não será capaz de processar sistema autônomo mensagens de janela, assim que chegarem.Se a caixa de diálogo de progresso é criada no mesmo segmento, a caixa de diálogo (e o botão de cancelar) será muito lento para entrada do usuário.
A transferência de dados pode ser cancelada somente quando BandedDataCallback retorna.Desde que BandedDataCallback pode ser chamado a cada intervalo de poucos segundos, o aplicativo deve indicar ao usuário que a operação de cancelar está em andamento.Por exemplo, pode desabilitar o botão cancel (Cancelar), ou exibir uma mensagem de espera.
Palavras-chave
Este exemplo demonstra as seguintes palavras-chave:
IWiaDevMgr, IWiaDevMgr::SelectDeviceDlg, IWiaEventCallback, IWiaEventCallback::ImageEventCallback, IWiaItem, IWiaItem::DeviceDlg, IWiaPropertyStorage, IWiaPropertyStorage::ReadMultiple, IWiaPropertyStorage::WriteMultiple, IWiaDataTransfer, IWiaDataTransfer::idtGetBandedData, IWiaDataCallback, IWiaDataCallback::BandedDataCallback