¿Por qué las imágenes BMP se almacenan al revés y sin relleno para que estén alineadas en cuatro bytes?¿Por qué los bmps están almacenados al revés?
Respuesta
He aquí una cita de Petzold:
Así, en DIB, la fila inferior de la imagen es la primera fila del archivo, y la fila superior de la imagen es la última fila en el archivo. Esta es llamada organización ascendente. Debido a que esta organización es contraintuitiva, puede preguntar por qué se hace de esta manera.
Bueno, todo se remonta al OS/2 Presentation Manager. Alguien en IBM decidió que todos los sistemas de coordenadas en PM, incluidos los de ventanas, gráficos y mapas de bits, deberían ser coherentes. Esto provocó un debate sobre : la mayoría de las personas, incluidos los programadores que han trabajado con en entornos de programación de texto a pantalla completa o ventanas, piensan en los términos de coordenadas verticales que aumentan al bajar la pantalla. Sin embargo, los programadores gráficos de computadora hardcore se acercan a la pantalla de video desde una perspectiva que se origina en las matemáticas de la geometría analítica. Esto implica un sistema de coordenadas rectangular (o cartesiano) donde aumentan las coordenadas verticales en el espacio.
En resumen, los matemáticos ganaron. Todo en PM se cargó con un origen inferior izquierdo , incluidas las coordenadas de la ventana. Y así es como los DIB llegaron a ser de esta manera.
Fuente: Charles Petzold, de programación para Windows 5ª Edición, Capítulo 15.
Es interesante que conservaran esta representación para DIB pero la cambiaron por coordenadas de ventana, reintroduciendo la inconsistencia. –
Se almacenan de acuerdo con un sistema de coordenadas de pantalla. (0, 0) está en la esquina superior izquierda. X (corresponde al ancho) va de izquierda a derecha. Y (corresponde a la altura) va de arriba a abajo.
En cuanto a "la pregunta 4 Byte" ver Why must "stride" in the System.Drawing.Bitmap constructor be a multiple of 4?
No, no lo son. Las BMP se almacenan de abajo hacia arriba, de izquierda a derecha. – mgiuca
- 1. ¿Por qué los nombres de dominio están al revés?
- 2. ¿Por qué los bytes enteros se almacenan al revés? ¿Esto se aplica solo a los encabezados?
- 3. ¿En qué ubicación están almacenados los procedimientos recopilados de Mysql?
- 4. MFC: ¿Por qué mi control de giro funciona al revés?
- 5. ¿Dónde están almacenados los servidores registrados?
- 6. OPCIONES SET .... dónde están almacenados
- 7. os.walk() al revés?
- 8. C++ 0x Tuplas Almacenar elementos al revés
- 9. ¿Por qué están prohibidos los comentarios anidados?
- 10. ¿Lee un archivo al revés?
- 11. Dónde están almacenados mis archivos de proyecto
- 12. ¿Dónde están almacenados los archivos de inclusión - Ubuntu Linux, GCC
- 13. ¿Los tipos enum están almacenados como ints en C#?
- 14. ¿Dónde están físicamente almacenados los conjuntos instalados en el GAC?
- 15. Dónde están los alias 'almacenados en Ubuntu 10.04
- 16. ¿Dónde almacena Visual Studio los marcadores y en qué formato están almacenados?
- 17. ¿Cómo llamo jQuery.slideDown() al revés?
- 18. ¿Por qué las solicitudes AJAX están limitadas al mismo dominio?
- 19. ¿Son compatibles los diseños automáticos de cacao al revés?
- 20. ¿Cómo hacen frente los sistemas con hilos a los datos compartidos que están siendo almacenados en caché por diferentes CPU?
- 21. ¿Hay un personaje de caridad al revés?
- 22. ¿Cómo encontrar los procedimientos almacenados por nombre?
- 23. Navegador al revés en la aplicación WPF
- 24. ¿Es posible curry al revés en Scala?
- 25. programa al revés en/usr/bin/games
- 26. por qué K & R hizo &&, || lógico y &, | a nivel de bit, no al revés?
- 27. ¿Por qué la mayoría de las aplicaciones de iPhone no funcionan al revés?
- 28. ¿Por qué los parámetros de `atan2`" están hacia atrás "?
- 29. Por qué los emuladores de Android están numerados como 5554
- 30. ¿Por qué los OODBMS no están tan extendidos como RDBMS?
posible duplicado de [¿Por qué tiene "paso" en el constructor System.Drawing.Bitmap ser un múltiplo de 4? ] (http://stackoverflow.com/questions/2185944/why-must-stride-in-the-system-drawing-bitmap-constructor-be-a-multiple-of-4) –
http://support.microsoft .com/kb/q81498/afirma que el upsidedownness es un artefacto de ser compatible con Presentation Manager, lo que significa que es algo que IBM hizo para OS/2. –
Están invertidos para compatibilidad con OS/2 Presentation Manager. En realidad, puede ser que los primeros mapas de bits de la línea superior tengan una altura negativa. –