2011-12-01 3 views
14

Perché le immagini BMP sono memorizzate al contrario e riempite a zero in modo che siano allineate a quattro byte?Perché i bmps vengono memorizzati al contrario?

+0

possibile duplicato del [Perché deve "passo" nel costruttore System.Drawing.Bitmap essere un multiplo di 4? ] (http://stackoverflow.com/questions/2185944/why-must-stride-in-the-system-drawing-bitmap-constructor-be-a-multiple-of-4) –

+1

http://support.microsoft .com/kb/q81498/afferma che l'upsideownness è un artefatto di essere retrocompatibili con Presentation Manager, il che significa che è qualcosa che IBM ha fatto per OS/2. –

+2

Sono capovolti per compatibilità con OS/2 Presentation Manager. In realtà può essere o, i primi bitmap della prima riga hanno un'altezza negativa. –

risposta

28

Ecco una citazione da Petzold:

Così, nel DIB, la riga inferiore dell'immagine è la prima riga del file, e la riga superiore dell'immagine è l'ultima riga del file. Questo è chiamato un'organizzazione bottom-up. Poiché questa organizzazione è controintuitiva, potresti chiederti perché è fatta in questo modo.

Bene, tutto torna al Presentation Manager di OS/2. Qualcuno al IBM ha deciso che tutti i sistemi di coordinate in PM, inclusi quelli per finestre, grafica e bitmap, dovrebbero essere coerenti. Questo ha provocato un dibattito : La maggior parte delle persone, tra cui i programmatori che hanno lavorato con la programmazione del testo a tutto schermo o in ambienti a finestre, pensano in termini di coordinate verticali che aumentano andando giù per lo schermo. Tuttavia, i programmatori di computer grafica hardcore si avvicinano al display video da una prospettiva che ha origine nella matematica della geometria analitica. Si tratta di un sistema di coordinate rettangolare (o cartesiano) in cui le coordinate verticali crescenti aumentano nello spazio .

In breve, i matematici hanno vinto. Tutto in PM è stato caricato con un'origine in basso a sinistra , comprese le coordinate della finestra. Ed è così che i DIB sono diventati così.

Fonte: Charles Petzold, di programmazione per Windows 5th Edition, Capitolo 15.

+2

Interessante che mantennero questa rappresentazione per DIB ma la cambiarono per le coordinate della finestra, reintroducendo l'incoerenza. –

-4

Vengono memorizzati in base a un sistema di coordinate di visualizzazione. (0, 0) si trova nell'angolo in alto a sinistra. X (corrisponde alla larghezza) va da sinistra a destra. Y (corrisponde all'altezza) va dal basso verso l'alto.

Per quanto riguarda la "questione 4 Byte" vedere Why must "stride" in the System.Drawing.Bitmap constructor be a multiple of 4?

+0

No, non lo sono. I BMP sono memorizzati dal basso verso l'alto, da sinistra a destra. – mgiuca