Windows bitmap: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
m Corretto il collegamento Raster con Grafica raster (DisamAssist) |
|||
(147 versioni intermedie di 97 utenti non mostrate) | |||
Riga 1:
{{NN|informatica|aprile 2023}}
{{Formato file
|nome = Windows bitmap (BMP) / Device-independent bitmap (DIB)
|logo =
|icona =
|immagine =
|didascalia =
|estensione = .bmp, .dib
|magic_number =
|mime = image/bmp
|uniform_type_identifier = com.microsoft.bmp
|typecode =
|sviluppatore = [[Microsoft]]
|proprietario =
|licenza = Microsoft Open Specification Promise
|data_rilascio =
|ultima_versione =
|data_ultima_versione =
|genere = [[Grafica raster]]
|compressione = lossless
|estensione_di =
|esteso_a =
|standard =
|aperto = sì
|sito = www.microsoft.com
}}
'''Windows bitmap''' è un formato dati utilizzato per la rappresentazione di [[immagine raster|immagini raster]] sui [[Sistema operativo|sistemi operativi]] [[Microsoft Windows]]. Noto soprattutto come [[formato di file]], fu introdotto con [[Windows 3.x#Windows 3.0|Windows 3.0]] nel [[1990]].
Le '''bitmap''', come sono comunemente chiamati i [[file]] d'immagine di questo tipo, hanno generalmente l'[[Estensione (file)|estensione]] '''.bmp''', o meno frequentemente '''.dib''' ('''device-independent bitmap''').
Line 19 ⟶ 38:
Nelle immagini con profondità più alta il colore non è indicizzato bensì codificato direttamente nelle sue componenti cromatiche [[RGB]]; con 16 o 32 bit per pixel alcuni bit possono rimanere inutilizzati.
La versione 3 del formato non supporta il [[canale
=== Versioni 4 e 5 ===
Con [[Windows 95]] e [[Windows 98]] Microsoft ha introdotto le nuove versioni 4 e 5 del formato bitmap, che supportano il [[canale
== Struttura ==
<div class="thumb tright">
<div class="thumbcaption">
{| border="2" bgcolor="F8F8F8" cellpadding="4" cellspacing="0" style="margin: 1em; border: 1px #aaa solid; border-collapse: collapse;"
| align="left" | '''Header del file'''<br />(<span style="font-family:monospace">BITMAPFILEHEADER</span>)
|-
| bgcolor="E3ECF4" align="left" | '''Blocco d'informazioni'''<br />(<span style="font-family:monospace">BITMAPINFO</span>):
:'''Header della bitmap'''<br />(<span style="font-family:monospace">BITMAPINFOHEADER</span>)
:<hr noshade="noshade" size="1" />
:eventualmente: '''modello di colore'''
Line 45 ⟶ 63:
| align="left" | eventualmente: spazio inutilizzato
|}
Struttura di una bitmap
</div>
Line 52 ⟶ 69:
Su disco le immagini bitmap sono codificate utilizzando alcune semplici [[Struttura dati|strutture]] che ne descrivono le proprietà. Tutti i valori sono in ordine [[Ordine dei byte|little endian]].
; BITMAPFILEHEADER
: Questo è l'header della bitmap che contiene informazioni sulla grandezza in [[byte]] del [[file]] e l'[[offset]] dall'inizio del file del primo byte nella mappa dei [[pixel]]. Questa struttura è assente quando la bitmap è integrata come risorsa all'interno di un'[[applicazione (informatica)|applicazione]] o [[Libreria software|libreria]].
; BITMAPINFOHEADER
: Qui sono indicate le dimensioni in pixel dell'immagine e il numero di colori utilizzati. Le informazioni sono relative al dispositivo sul quale la bitmap è stata creata. Sempre in questa struttura sono indicate inoltre la [[risoluzione (grafica)|risoluzione]] orizzontale e verticale del dispositivo di output: questi valori, uniti a quelli della larghezza e dell'altezza in pixel, determinano le dimensioni di stampa dell'immagine in grandezza reale.
; modello di colore
: Con le versioni 4 e 5 del formato bitmap il blocco d'informazioni è stato ampliato con strutture che consentono di definire [[Modello di colore|modelli di colore]] personalizzati. Nella pratica queste strutture sono poco comuni.
; tavolozza
: Questa struttura è un [[array]] che fa corrispondere un colore ad ogni indice che può essere assegnato ad un pixel. Nella [[Tavolozza (informatica)|tavolozza]] ogni colore è rappresentato da una struttura di 4 byte (<span style="font-family:monospace">RGBQUAD</span>), uno ciascuno per i componenti [[rosso]], [[verde]] e [[blu]] più un byte non utilizzato. Nel caso di immagini con 16, 24 o 32
; mappa dei pixel : Questa struttura di dati costituisce il corpo vero e proprio della bitmap, dove ad ogni pixel si fa corrispondere un colore sotto forma di indice nella tavolozza, oppure nelle sue componenti cromatiche. Nel caso in cui la dimensione in bytes delle linee orizzontali non sia un multiplo di 4, queste vengono allungate con bytes nulli. Nella versione 5 del formato bitmap questa struttura può anche incorporare immagini [[Joint Photographic Experts Group|JPEG]] e [[Portable Network Graphics|PNG]].
Nel caso più comune di bitmap nella versione 3 del formato non compresse e senza tavolozza extra per [[Profondità di colore|profondità]] superiori ad 8 [[Bit (informatica)|bit]] per pixel, la dimensione in byte richiesta dal file può essere espressa con la seguente [[formula]] matematica, dove ''w'' ed ''h'' indicano rispettivamente la larghezza e l'altezza dell'immagine in pixel e ''b'' la profondità in bit per pixel.
:<math>54+4\left(u\left(15-b\right)\cdot2^{b}+h\left\lceil\frac{w\cdot b}{32}\right\rceil\right)</math>
Con <math>u\left(x\right)</math> si è indicata la [[funzione gradino di Heaviside]], il cui valore è 0 per argomenti negativi e 1 per quelli positivi. <math>\lceil x\rceil</math> indica la funzione soffitto, equivalente al [[numero intero]] più piccolo maggiore o uguale all'argomento.
La stessa [[Espressione matematica|espressione]] si può formulare più semplicemente in [[C (linguaggio)|linguaggio C]] in questo modo:
<pre>
54 + 4 * (((1 << b) & 0xffff) + h * ((w * b + 31) / 32))
</pre>
===Struttura dettagliata===
{| class="wikitable"
! colspan="4" align="center" bgcolor="#FFEFD5" | <span style="font-family:monospace">BITMAPFILEHEADER</span> (dimensione: 14 byte)
|-
Line 76 ⟶ 99:
|-
| 0
| style="font-family:monospace" | [[Word
| bfType
| la [[Stringa (informatica)|stringa]] [[ASCII]] <span style="font-family:monospace">"BM"</span> (valore decimale
|-
| 2
| style="font-family:monospace" | [[Dword
| bfSize
| dimensione del file (''non affidabile
|-
| 6
| style="font-family:monospace" | [[Dword
| bfReserved
| 0
|-
| 10
| style="font-family:monospace" | [[Dword
| bfOffBits
| offset del primo byte della mappa dei [[pixel]] a partire dall'inizio del file
|}
{| class="wikitable"
! colspan="4" align="center" bgcolor="#FFEFD5" | <span style="font-family:monospace">BITMAPINFOHEADER</span> (dimensione: 40 byte)
|-
Line 105 ⟶ 128:
|-
| 0
| style="font-family:monospace" | [[Dword
| biSize
| dimensione in byte del blocco d'informazioni insieme alle strutture per il modello di colore aggiunte nelle versioni 4 e 5:
; versione 3 : 40 (hex 28))
; versione 4 : 108 (hex 6C)
; versione 5 : 124 (hex 7C)
|-
| 4
Line 121 ⟶ 144:
| biHeight
| Corrisponde in [[valore assoluto]] all'altezza dell'immagine in [[pixel]]:
; quando il valore
; quando il valore è negativo : l'immagine è ''top-down'' (la mappa dei [[pixel]] incomincia dalla riga di pixel più in alto e finisce con quella più in basso).
|-
| 12
| style="font-family:monospace" | [[Word
| biPlanes
| sempre 1
|-
| 14
| style="font-family:monospace" | [[Word
| biBitCount
| [[profondità di colore]] dell'immagine in [[Bit (informatica)|bit]] per [[pixel]], dev'essere uno dei seguenti valori: 1, 4, 8, 16, 24 o 32. In caso di 1, 4 o 8 [[Bit (informatica)|bit]] per [[pixel]] i colori sono indicizzati. I valori 16 e 32 sono poco comuni. Nella versione 5 del formato si può usare il valore 0 quando viene incapsulata un'immagine [[Joint Photographic Experts Group|JPEG]] o [[Portable Network Graphics|PNG]].
|-
| 16
| style="font-family:monospace" | [[Dword
| biCompression
| uno dei seguenti valori:
Line 147 ⟶ 170:
|-
| 20
| style="font-family:monospace" | [[Dword
| biSizeImage
|
Indica la
|-
| 24
| style="font-family:monospace" | [[Long integer|LONG]]
| biXPelsPerMeter
| [[risoluzione (grafica)|risoluzione]] orizzontale del dispositivo di output in [[pixel]] per [[metro]]; 0 se la risoluzione non è specificata.
|-
| 28
| style="font-family:monospace" | [[Long integer|LONG]]
| biYPelsPerMeter
| [[risoluzione (grafica)|risoluzione]] verticale del dispositivo di output in [[pixel]] per [[metro]]; 0 se la risoluzione non è specificata.
|-
| 32
| style="font-family:monospace" | [[Dword
| biClrUsed
|
Line 171 ⟶ 194:
|-
| 36
| style="font-family:monospace" | [[Dword
| biClrImportant
|
Line 180 ⟶ 203:
|}
{| style="text-align: left;"
! style="border: thin solid grey" | <span style="font-family:monospace">BITMAPINFOHEADER</span>
Line 294 ⟶ 316:
| align="right" bgcolor="white" style="border: thin solid grey" | 4
|}
== Vantaggi e svantaggi ==
Una delle caratteristiche essenziali del formato bitmap che ne hanno fatto per molto tempo la fortuna è la velocità con cui le immagini vengono lette o scritte su disco,
{| border="1" cellpadding="3" cellspacing="0" style="float: left; margin: 0 1em 0 0"
| align="center" colspan="2
|-
| [[
|
{| cellpadding="4"
| '''BMP''' non compresso
|
{| cellpadding="0" cellspacing="0" width="40"
|-
| bgcolor="#cc2222" width="40" |
|}
| align="right" | 24030
|-
| '''BMP''' compresso
|
{| cellpadding="0" cellspacing="0" width="15"
|-
| bgcolor="#cc2222" width="15" |
|}
| align="right" | 8764
|-
| [[Graphics Interchange Format|GIF]]
|
{| cellpadding="0" cellspacing="0" width="9"
|-
| bgcolor="#cc2222" width="9" |
|}
| align="right" | 5365
|-
| [[Portable Network Graphics|PNG]]
|
{| cellpadding="0" cellspacing="0" width="7"
|-
| bgcolor="#bb2222" width="7" |
|}
| align="right" | 4029
|}
|}
Esiste anche, ma non è molto usata, la possibilità di comprimere le bitmap da 16 e 256 colori con l'[[algoritmo]] [[Run-length encoding|RLE]]. La [[Compressione dei dati|compressione]] RLE non è tuttavia efficiente come altri metodi di [[Compressione dati lossless|compressione lossless]]. Le bitmap, anche quelle compresse, occupano di regola più spazio su disco rispetto ad altri formati [[Grafica raster|raster]] come [[Graphics Interchange Format|GIF]] o [[Portable Network Graphics|PNG]], e sono perciò meno adatte di questi alla trasmissione di immagini via [[Internet]] o alla memorizzazione permanente su [[Compact disc|CD]], [[DVD]] o altri supporti di dati.
Una limitazione grave del formato bitmap, almeno nella comune versione 3, è quella di non supportare
== Usi pratici ==
Line 347 ⟶ 369:
=== Elaborazione delle immagini ===
Veloci e
=== Internet ===
Line 356 ⟶ 378:
== Bitmap nella programmazione ==
Sui [[Sistema operativo|sistemi operativi]] [[Microsoft Windows|Windows]] le bitmap sono, prima ancora che [[file]], [[Oggetto (informatica)|oggetti]] utilizzati internamente dall'[[interfaccia grafica]] [[Graphics Device Interface|GDI]]. Diversi [[Linguaggio di programmazione|linguaggi di programmazione]] per Windows hanno perciò sviluppato astrazioni specifiche per questo tipo di dati.
=== Windows API ===
L'[[API di Windows]] offre sin dalle prime versioni [[Funzione (informatica)|funzioni]] speciali che permettono di effettuare le più semplici operazioni sulle bitmap, come copiare o combinare parti di un'immagine in memoria. Le bitmap sono oggetti GDI così come i ''[[font]]'' (tipi di carattere), i ''brush'' (pennelli) e le ''[[Tavolozza (informatica)|palette]]'' (tavolozze); così come gli altri oggetti di Windows le bitmap vengono manipolate attraverso un
I [[Linguaggio di programmazione ad alto livello|linguaggi di programmazione ad alto livello]] utilizzano in parte le funzioni API per implementare tecniche di [[programmazione (informatica)|programmazione]] grafica con le bitmap.
=== .NET ===
Il [[Framework .NET|.NET Framework]] offre supporto nativo per diversi tipi d'immagini raster, e naturalmente anche per le bitmap tramite la [[Classe (informatica)|classe]] <
=== Java ===
A differenza del .NET Framework che è stato sviluppato dalla [[Microsoft]] soprattutto per Windows, [[Java (linguaggio di programmazione)|Java]] si
=== C / C++ ===
Tra le librerie [[C (linguaggio)|C]] [[
=== Delphi ===
Sin dalla prima edizione di [[Delphi]], è presente nella VCL (Visual Component Library) l'oggetto TBitmap, che permette di manipolare files bitmap. Esistono poi progetti esterni a Delphi, che ampliano le potenzialità e le funzionalità dell'oggetto TBitmap, tra questi ricordiamo Graphics32<ref>{{cita web|lingua=en|url=http://graphics32.org/documentation/Docs/Units/GR32_Image/Classes/TImage32/_Body.htm|titolo=TImage32|sito=Graphics32|urlarchivio=https://web.archive.org/web/20110726130649/http://graphics32.org/documentation/Docs/Units/GR32_Image/Classes/TImage32/_Body.htm}}</ref>, Project JEDI<ref>{{cita web|lingua=en|url=https://www.delphi-jedi.org|titolo=Project JEDI}}</ref> e GLScene<ref>{{cita web|lingua=en|url=http://glscene.sourceforge.net/wikka/HomePage|titolo=GLScene|urlarchivio=https://web.archive.org/web/20101110002948/http://glscene.sourceforge.net/wikka/HomePage}}</ref>.
=== Python ===
Anche tramite il linguaggio [[
<syntaxhighlight lang="python">
from CoreGraphics import *
import math
# Crea un contesto bitmap RGB, trasperente con sfondo nero 256x256
cs = CGColorSpaceCreateDeviceRGB ()
c = CGBitmapContextCreateWithColor (256, 256, cs, (0,0,0,0))
# Crea un quadrato giallo con una linea rossa che ne percorre il perimetro
c.saveGState ()
c.setRGBStrokeColor (1,0,0,1) # rosso
c.setRGBFillColor (1,1,0,1) # giallo
c.setLineWidth (3)
c.setLineJoin (kCGLineJoinBevel)
c.addRect (CGRectMake (32.5, 32.5, 191, 191))
c.drawPath (kCGPathFillStroke);
c.restoreGState ()
# Aggiunge del testo ruotato
c.saveGState ()
c.translateCTM (128, 128)
c.rotateCTM (math.radians(-30.0))
c.translateCTM (-128, -128)
c.setRGBStrokeColor (0,0,0,1)
c.setRGBFillColor (1,1,1,1)
c.selectFont ("Helvetica", 36, kCGEncodingMacRoman)
c.setTextPosition (40, 118)
c.setTextDrawingMode (kCGTextFillStroke)
c.setShadow (CGSizeMake (0,-10), 2)
c.showText ("hello, world", 12)
c.restoreGState ()
# Salva l' immagine in formato .png
c.writeToFile ("out.png", kCGImageFormatPNG)
</syntaxhighlight>
==Note==
<references/>
== Bibliografia ==
* {{cita libro|autore=James D. Murray|autore2=William vanRyper|titolo=Encyclopedia of Graphics File Formats|edizione=2|capitolo=Microsoft Windows Bitmap|pagine=572-591|editore=O'Reilly|anno=1996|lingua=en|ISBN=1-56592-161-5|url=https://www.fileformat.info/format/bmp/egff.htm|accesso=24 aprile 2023}}
* {{cita libro|cognome=Miano|nome=John|titolo=Compressed image file formats: JPEG, PNG, GIF, XBM, BMP|url=https://archive.org/details/compressedimagef0000mian|città=Reading|editore=Addison Wesley|anno=1999|lingua=en|ISBN=0-201-60443-4}}
== Voci correlate ==
*[[
== Altri progetti ==
{{interprogetto}}
== Collegamenti esterni ==
* {{FOLDOC|bmp}}
* {{cita web|url=https://msdn.microsoft.com/library/default.asp?url=/library/en-us/gdi/bitmaps_99ir.asp|titolo=Pagina della MSDN Library sulle bitmap|lingua=en|urlmorto=sì}}
* {{cita web|url=https://msdn.microsoft.com/library/default.asp?url=/library/en-us/gdi/bitmaps_4v1h.asp|titolo=Struttura delle bitmap|lingua=en|urlmorto=sì}}
* {{cita web|url=http://www.softzone.it/tutorials/showquestion.php?faq=1&fldAuto=24|titolo=Bitmaps, Device Contexts e BitBlt|sito=Softzone|urlmorto=sì|urlarchivio=https://web.archive.org/web/20060506052951/http://www.softzone.it/tutorials/showquestion.php?faq=1&fldAuto=24|dataarchivio=6 maggio 2006}}
* {{cita web|url=http://wvnvaxa.wvnet.edu/vmswww/bmp.html|titolo=Example BMP images|lingua=en|accesso=15 gennaio 2006|urlarchivio=https://web.archive.org/web/20060625100540/http://wvnvaxa.wvnet.edu/vmswww/bmp.html|dataarchivio=25 giugno 2006|urlmorto=sì}}
{{Formati di compressione}}
{{Portale|informatica}}
[[Categoria:Formati di file grafici]]
|