¿Qué debo hacer para rotar un mapa de bits en Windows GDI, C++?Cómo rotar Bitmap en Windows GDI?
Respuesta
Puede hacerlo con GDI + (#include <gdiplus.h>
). La clase Graphics tiene el RotateTransform method. Eso permite rotaciones arbitrarias. Use Image::RotateFlip() si solo necesita girar en incrementos de 90 grados, eso es mucho más eficiente.
¿Creí que había pedido GDI? –
@Frank Krueger: debe poder leer la mente en este sitio. O eso, o tirar la pasta a la pared y ver qué se pega. –
Mejor se adhiere a la implementación bruta de GDI + ya que RotateFlip es infame por rechazar la excepción 'Error GDI + genérico' con bastante frecuencia. –
Parece que tiene que usar PlgBlt. Tome las 4 esquinas de su rectángulo como puntos 2D, rótelas y luego llame a PlgBlt.
Para copiar un mapa de bits en un paralelogramo; utilice la función PlgBlt , que realiza una transferencia de bloque de bits desde un rectángulo en un contexto de dispositivo fuente en un paralelogramo en contexto de dispositivo de destino. Para rotar el mapa de bits, una aplicación debe proporcionar las coordenadas, en el mundo unidades, que se utilizarán para las esquinas de el paralelogramo.
Los documentos PlgBlt mencionan específicamente que las transformaciones de rotación no son compatibles. Eso es exacto Enlace: http://msdn.microsoft.com/en-us/library/dd162804%28VS.85%29.aspx –
Otra posibilidad (más allá de las ya sugeridas) es utilizar SetWorldTransform()
. Esto es diferente ya que es modal y se aplica al DC como un todo, no solo a una sola operación. Si desea rotar un mapa de bits girado, pero otras cosas sin rotación, probablemente no sea su mejor opción. Si quieres dibujar un número de cosas giradas, o (especialmente) si quieres rotar todo lo que dibujas (al menos en un DC), puede funcionar muy bien.
Probé SetWorldTransform() y no tuvo absolutamente ningún efecto. La documentación dice que el modo de gráficos del contexto del dispositivo debe establecerse en GM_ADVANCED. Lo intenté, y resultó en un mapa de bits totalmente negro. Esto es lo que suele ocurrir al probar una función de Microsoft; no funciona, y pasas el 90% de tu tiempo tratando de descubrir por qué. .NET es notablemente mejor, pero es muy lento. – user20493
- 1. Cómo rotar el texto en GDI +?
- 2. ¿Cómo rotar Bitmap sin crear uno nuevo?
- 3. Windows GDI: horizontal/vertical DPI
- 4. ¿Cómo centro una imagen girada usando GDI +?
- 5. un error genérico en GDI +
- 6. gdi + Gráficos :: DrawImage realmente lento ~~
- 7. cómo rellenar degradado para roundrect en gdi puro (no gdi +)
- 8. C#: GDI +: Escritura de más de una imagen usando Save Method of Bitmap
- 9. Ghost-borders ('ringing') al redimensionar en GDI +
- 10. Cómo funciona GDI/GDI + sin OpenGL o DirectX
- 11. Convertir bitmap a PNG en la memoria en C++ (win32)
- 12. ¿Cómo renderizar bitmap en canvas en WPF?
- 13. ¿Cómo dibujar en Bitmap en Android?
- 14. C# rotate bitmap 90 degrees
- 15. Android: ¿Cómo resolver Bitmap java.lang.OutOfMemoryError?
- 16. ¿Cómo usar el dibujo GDI + en WPF?
- 17. Cómo rotar MapView?
- 18. Cómo rotar UITableViewCellAccessoryDisclosureIndicator?
- 19. OpenCV: cómo rotar IplImage?
- 20. Apache rotar registros de acceso y error Windows
- 21. Bitmap recycle() en java Android
- 22. GDI + doble búfer en C++
- 23. Transparencia al texto en GDI
- 24. Dibujando muchos rectángulos en GDI +
- 25. Disponibles vs Bitmap
- 26. Android Tile Bitmap
- 27. Cómo obtener un objeto URI desde Bitmap
- 28. ¿Cuál es la diferencia entre GDI y GDI +?
- 29. LayerDrawable to bitmap
- 30. BitMap Eventlistener no funciona
¿Qué tipo de rotación? ¿Incrementos de 90 grados, incrementos arbitrarios? –