Win32 BitBlt - imagem espelhada horizontalmente
Pergunta
Então, eu li que StretchBlt pode espelhar as imagens horizontalmente e / ou verticalmente, negando a nWidthSrc / Dest e nHeightSrc / parâmetros Dest. Gostaria que esta funcionalidade sem a sobrecarga de um StretchBlt desempenho. Eu tentei a mesma técnica com BitBlt mas não funcionou.
Existe alguma maneira para espelhar uma imagem com algo tão simples como BitBlt, sem o exagero de um StretchBlt? Ou será que StretchBlt não afetar o desempenho se os tamanhos de origem e de destino são os mesmos?
Solução
BitBlt só irá executar operações mathmatic (OR, XOR, etc) sobre os pixels individuais em questão, não vai redimensionar a imagem de qualquer forma. Isso é exatamente o que StretchBlt é para, e StretchBlt (em comparação com quaisquer outros gráficos redimensionamento operação) é insanamente rápido que na maioria dos casos ele pode usar a placa de vídeo para acelerar o seu desempenho.
Outras dicas
Todas as funções Win32 são, provavelmente, vai ser extremamente otimizado.
O que faz você pensar que StretchBlt será um grande impacto na performance?
Você perfilado seu aplicativo usando StretchBlt?
Você pode reverter todos os dados de bitmap si mesmo e veja se você pode fazer melhor que StretchBlt.
Aqui está um link que pode ajudá-lo:
http://www.codeguru.com/cpp /gm/bitmap/specialeffects/article.php/c1739
Para espelhar uma imagem você só precisa percorrer os pixels na ordem inversa. Tal como se você deseja espelhar horizontalmente você só precisa fazer o seguinte:
- expandir tela de imagem para dobrar o tamanho
- começar na parte inferior da imagem e trabalhar seu caminho até escrever os pixels para a área espelhada de cima para baixo.
- não etapa 3 da esquerda para a direita.
Eu não sei o idioma que você está usando, mas a maioria deles permitem que você manipula os pixels ou bits numa base individual usando GDI.
De jeito nenhum você vai ser mais eficiente que StretchBlt, a menos que você sabe algumas informações adicionais sobre a imagem (por exemplo, há uma fronteira para que você não tem que virar certas pixels.