Exemplo do MMXSwarm: Demonstra CImage e Visual C++ MMX suporte

MMXSwarm é um exemplo MFC que demonstra como usar o MFC CImage classe, a __m64 and __m128i tipos de dados e bitmaps independentes de dispositivo (DIB).

O exemplo demonstra a implementação de CImage suporte em um aplicativo para carregar básico e salvamento de dados em vários formatos de imagem. Além disso, o exemplo demonstra a manipulação direta de uma superfície DIB, bem sistema autônomo utilizando suporte a compilador de nível mais alto para obter instruções de inteiro MMX e SSE2 para otimizar a manipulação de bitmap sem escrever código de assembler.

No projeto, os arquivos Surface.* contém a classe base C++ para a manipulação de superfície DIB:

  • MMXSurface *. * arquivos contêm as classes derivadas com otimizações MMX.MMXWrapper.h contém uma classe simples que encapsula __m64 tipo de dados e operações em uma classe amigável do C++ para operações MMX saturadas de 16 bit.

  • SSE2Surface *. * arquivos contêm as classes derivadas com otimizações SSE2.SSE2Wrapper.h contém uma classe simples que encapsula __m128i tipo de dados e operações em uma classe amigável do C++ para operações com inteiros SSE2 saturadas 16 bit.

Essas classes de wrapper não são geralmente útil "sistema autônomo está", que contém apenas suficiente funcionalidade para a amostra.O exemplo não usa archictecture/modo de exibição do documento.The CChildView classe é derivada de CWnd e limite para a janela do quadro.

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.

Criando e executando o exemplo

Para compilação e executar a amostra MMXSwarm

  1. Abra a solução MMXSwarm.sln.

  2. Sobre o Compilação menu, clicar Compilação.

  3. No menu Debug, clique em Start Without Debugging.

No modo depurar e versão, listagens de assembly dos arquivos MMXSurface*.cpp e SSE2Surface*.cpp são geradas no diretório de saída.Examine esses arquivos para ver o código gerado pelo partes do projeto MMX e SSE2.

compilação o exemplo no modo de versão para ver as melhorias de velocidade obtida com usando o suporte de inteiro intrínseco MMX e SSE2.Além disso, as informações de depurar são geradas para a criação de versão facilitar a depurar através do MMX e SSE2 gerado código.

Para obter melhores resultados, executar o exemplo no modo de cores de 32 bit.

O exemplo desenha um swarm simples na tela e usa uma rotina de atenuação personalizada para desfoque da imagem ao longo do time.The Arquivo menu tem opções para salvar a imagem corrente ou carregar uma imagem existente.The Modo de exibição menu possui opções para ativar/desabilitar o desfoque e o swarm.The Modo de exibição menu também contém um comando de 'pausar de blit de cores' desativará BitBlt na tela que permite melhor distinções de taxa de quadro nas implementações do desfoque.Além disso, vários pressionamentos de tecla assincronamente são verificados para Outros manipulação de DIB (deslocar, espaço, seta para cima e excluir).Finalmente, a CImage menu permite que você selecionar a profundidade de bit de DIB que estão sendo manipulada. Geralmente, é melhor se ele corresponder a profundidade de bit da área de trabalho.Cada profundidade de bit tem uma opção de desfoque com uma rotina de C++ genérica ou um otimizado com MMX ou SSE2 intrinsics inteiro.A BAR de status contém uma medida de quadros por segundo para ilustrar as diferenças de desempenho.

Palavras-chave

Este exemplo demonstra as seguintes palavras-chave:

CImage::GetExporterFilterString, CImage::Load, CImage::SaveAdvanced, CImage::criar, CImage::GetPitch, CImage::GetDC, CImage::ReleaseDC, CImage::Destroy, CImage::BitBlt, CImage::GetBits, CImage::GetHeight, CImage::GetPixelAddress, GetAsyncKeyState, CDC::GetDeviceCaps, ON_UPDATE_COMMAND_UI_RANGE, CWnd::OnSizing, __m64, __m128i, CWinApp::OnIdle _m_from_int, _mm_setzero_si64, _mm_adds_pu16, _mm_subs_pu16, _mm_srli_pi16, _mm_slli_pi16, _mm_and_si64, _mm_or_si64, _mm_andnot_si64, _m_to_int, _mm_packs_pu16, _mm_unpacklo_pi8, _mm_unpackhi_pi8, _mm_loadl_epi64, _mm_setzero_si128, _mm_set1_epi64, _mm_adds_epu16, _mm_subs_epu16, _mm_srli_epi16, _mm_slli_epi16, _mm_and_si128, _mm_or_si128, _mm_andnot_si128, _mm_packus_epi16, _mm_store_si128, _mm_load_si128, _mm_packus_epi16, _mm_unpacklo_epi8, _mm_unpackhi_epi8

Consulte também

Outros recursos

Exemplos do MFC