Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > it.comp.lang.visual-basic > #18792 > unrolled thread
| Started by | "Sauro" <vicchi@crsscala.it> |
|---|---|
| First post | 2016-04-27 17:55 +0200 |
| Last post | 2016-05-01 20:46 +0200 |
| Articles | 8 — 2 participants |
Back to article view | Back to it.comp.lang.visual-basic
Curiosità su file BMP e PDF "Sauro" <vicchi@crsscala.it> - 2016-04-27 17:55 +0200
Re: Curiosità su file BMP e PDF Franz_aRTiglio <franzgol@N0SPAMtin.it> - 2016-04-27 18:16 +0200
Re: Curiosità su file BMP e PDF "Sauro" <vicchi@crsscala.it> - 2016-04-28 14:24 +0200
Re: Curiosità su file BMP e PDF Franz_aRTiglio <franzgol@N0SPAMtin.it> - 2016-04-28 16:49 +0200
Re: Curiosità su file BMP e PDF Franz_aRTiglio <franzgol@N0SPAMtin.it> - 2016-04-28 16:55 +0200
Re: Curiosità su file BMP e PDF "Sauro" <vicchi@crsscala.it> - 2016-05-01 09:38 +0200
Re: Curiosità su file BMP e PDF Franz_aRTiglio <franzgol@N0SPAMtin.it> - 2016-05-01 10:06 +0200
Re: Curiosità su file BMP e PDF "Sauro" <vicchi@crsscala.it> - 2016-05-01 20:46 +0200
| From | "Sauro" <vicchi@crsscala.it> |
|---|---|
| Date | 2016-04-27 17:55 +0200 |
| Subject | Curiosità su file BMP e PDF |
| Message-ID | <nfqneg$1hj0$1@gioia.aioe.org> |
Uso il vecchio paint per disegnare dei loghi. Con vb6 ed un modulo di classe di Luigi Micco creo dei files PDF per ordini, ddt e fatture che posso poi inviare per email. L'altro giorno un mio cliente ha disegnato un nuovo logo (probabilmente non con paint). Questo logo, principalmente di colore rosso, diventa di colore blù quanto viene inserito nel file PDF nel modo sopradescritto. Ho già risolto ridisegnando il logo con paint però mi rimane la curiosità di sapere cosa poteva causare il cambio di colore. Qualche idea? Grazie e saluti a tutti. Sauro
[toc] | [next] | [standalone]
| From | Franz_aRTiglio <franzgol@N0SPAMtin.it> |
|---|---|
| Date | 2016-04-27 18:16 +0200 |
| Message-ID | <nfqog3$1mes$1@gioia.aioe.org> |
| In reply to | #18792 |
Sauro ci ha detto : > Ho già risolto ridisegnando il logo con paint però > mi rimane la curiosità di sapere cosa poteva > causare il cambio di colore. Mah... sei sicuro che fosse un vero BMP ? fagli l'autopsia con un hex editor e controlla le intestazioni, e' un po' che non ci "gioco" ma mi pare di ricordare che il "filtro" windows di importazione delle immagini non verifica se (esempio) un'immagine codificata in PNG ha estensione BMP o JPG, ovvio che se il modulo di cui parli (che non conosco) ammette un palette max di (sempre per esempio) 256 colori 8 bit ma l'immagine e' in origine codificata con qualche palette "esotica" (es. le palette delle GIF che possono avere un numero di colori semi-arbitrario)....
[toc] | [prev] | [next] | [standalone]
| From | "Sauro" <vicchi@crsscala.it> |
|---|---|
| Date | 2016-04-28 14:24 +0200 |
| Message-ID | <nfsvep$19bo$1@gioia.aioe.org> |
| In reply to | #18793 |
"Franz_aRTiglio ha scritto nel messaggio
> Sauro ci ha detto :
>
>> Ho già risolto ridisegnando il logo con paint però
>> mi rimane la curiosità di sapere cosa poteva
>> causare il cambio di colore.
>
> Mah... sei sicuro che fosse un vero BMP ? fagli l'autopsia con un
> hex editor e controlla le intestazioni, e' un po' che non ci "gioco"
> ma mi pare di ricordare che il "filtro" windows di importazione delle
> immagini non verifica se (esempio) un'immagine codificata in PNG
> ha estensione BMP o JPG, ovvio che se il modulo di cui parli (che
> non conosco) ammette un palette max di (sempre per esempio) 256
> colori 8 bit ma l'immagine e' in origine codificata con qualche
> palette "esotica" (es. le palette delle GIF che possono avere
> un numero di colori semi-arbitrario)....
Non sono in grado di fare il controllo di cui parli
in quanto non conosco la struttura interna dei vari
file immagine.
Quel che posso dire è che il LoadPicture di vb6 lo
legge bene.
Di seguito riporto una funzione di quel modulo di
classe di cui parlavo.
Magari tu ci capisci qualcosa.
Private Function LeggeBMP(FileName As String, _
ByRef ImgBuf() As Byte, _
ByRef ImgColor() As Byte, _
ByRef ImgWidth As Long, _
ByRef ImgHeight As Long, _
ByRef ImgBPP As Byte, _
Optional ColorSpace As pdfColorSpace = pdfRGB) As
Boolean
' BITMAPFILEHEADER_Type
Dim bfType As String * 2 ' The string "BM" (hex value
&H424D).
Dim bfSize As Long ' The size of the file, measured in
[Bytes].
Dim bfDummy As Integer ' Not used, set to zero.
Dim bfOffBits As Long ' The start offset of the bitmap
data in the file.
' BITMAPINFOHEADER
Dim biSize As Long ' 40 (the size of this structure).
Dim biWidth As Long ' The width of the bitmap in pixels.
Dim biHeight As Long ' The height of the bitmap in
pixels.
Dim biPlanes As Integer ' 1 (DIBs always have one plane).
Dim biBitCount As Integer ' 1 for monochrome, 4 for 16 colors,
8 for 256 color, 24 for 24-bit RGB color.
Dim biCompression As Long ' Specifies the type of compression
for compressed
Dim biSizeImage As Long ' The size of the image in bytes.
Dim biXPelsPerMeter As Long ' Number of horizontal pixels per
meter for
Dim biYPelsPerMeter As Long ' Number of vertical pixels per
meter for
Dim biClrUsed As Long ' Number of entries in the DIB color
table
Dim biClrImportant As Long ' Number of entries in the DIB color
table that
Dim c As Long
Dim fb As Integer
Dim XBMP As Long
Dim BPP As Byte
Dim i As Long
Dim KK As Long
Dim blnFlag As Boolean
Dim TempImg() As Byte
Dim TempCol() As Byte ' RGBQUAD_Type
Dim lngGray As Long
fb = FreeFile
Open FileName For Binary As #fb
' BITMAPFILEHEADER
Get #fb, , bfType
Get #fb, , bfSize
Get #fb, , bfDummy
Get #fb, , bfDummy
Get #fb, , bfOffBits
LeggeBMP = False
If bfType = "BM" Then
' BITMAPINFOHEADER
Get #fb, , biSize
Get #fb, , biWidth
Get #fb, , biHeight
Get #fb, , biPlanes
Get #fb, , biBitCount
Get #fb, , biCompression
Get #fb, , biSizeImage
Get #fb, , biXPelsPerMeter
Get #fb, , biYPelsPerMeter
Get #fb, , biClrUsed
Get #fb, , biClrImportant
BPP = biBitCount
If BPP <= 8 Then
' legge la palette di colori
ReDim TempCol(1 To (2 ^ BPP) * 4)
Get #fb, , TempCol()
If ColorSpace = pdfRGB Then
ReDim ImgColor(1 To 3 * (2 ^ BPP))
For c = 0 To (2 ^ BPP) - 1
ImgColor(c * 3 + 1) = TempCol(c * 4 + 1) ' red
ImgColor(c * 3 + 2) = TempCol(c * 4 + 2) ' green
ImgColor(c * 3 + 3) = TempCol(c * 4 + 3) ' blue
Next
Else
ReDim ImgColor(1 To (2 ^ BPP))
For c = 0 To (2 ^ BPP) - 1
lngGray = (0.33 * TempCol(c * 4 + 1) + 0.59 * TempCol(c * 4 + 2) +
0.11 * TempCol(c * 4 + 3))
ImgColor(c + 1) = IIf(lngGray > 255, 255, lngGray)
Next
End If
End If
XBMP = ((biWidth * BPP / 8) + 3&) And &HFFFFFFFC ' [Bytes].
ImgWidth = biWidth
ImgHeight = biHeight
ImgBPP = CByte(biBitCount)
ReDim TempImg(1 To biHeight * XBMP)
Get #fb, bfOffBits + 1, TempImg()
Close #fb
ReDim ImgBuf(1 To biHeight * XBMP)
KK = 0
If BPP > 8 Then
blnFlag = ((biWidth Mod 4) <> 0)
If ColorSpace = pdfRGB Then
For c = 1 To UBound(TempImg) - 1 Step 3
ImgBuf(3 * KK + 1) = TempImg(c + 2)
ImgBuf(3 * KK + 2) = TempImg(c + 1)
ImgBuf(3 * KK + 3) = TempImg(c)
If (((KK + 1) Mod biWidth) = 0) And blnFlag Then c = c + (biWidth
Mod 4)
KK = KK + 1
Next
Else
For c = 1 To UBound(TempImg) - 1 Step 3
lngGray = 0.33 * TempImg(c + 2) + 0.59 * TempImg(c + 1) + 0.11 *
TempImg(c)
ImgBuf(KK + 1) = IIf(lngGray > 255, 255, lngGray)
If (((KK + 1) Mod biWidth) = 0) And blnFlag Then c = c + (biWidth
Mod 4)
KK = KK + 1
Next
ReDim Preserve ImgBuf(1 To KK)
End If
ElseIf BPP <= 8 Then
blnFlag = (biWidth Mod IIf(BPP = 8, 4, 8)) <> 0
For i = 1 To UBound(TempImg)
ImgBuf(KK + 1) = TempImg(i)
If ((KK + 1) Mod Int((biWidth + (8 / BPP) - 1) / (8 / BPP))) = 0 And
blnFlag Then
i = i + (XBMP - (i Mod XBMP))
End If
KK = KK + 1
Next
ReDim Preserve ImgBuf(1 To KK)
End If
LeggeBMP = True
End If
If fb > 0 Then Close #fb
End Function
Ciao Franz e grazie.
Sauro
[toc] | [prev] | [next] | [standalone]
| From | Franz_aRTiglio <franzgol@N0SPAMtin.it> |
|---|---|
| Date | 2016-04-28 16:49 +0200 |
| Message-ID | <nft7om$1o9r$1@gioia.aioe.org> |
| In reply to | #18794 |
Il 28/04/2016, Sauro ha detto : > Non sono in grado di fare il controllo di cui parli > in quanto non conosco la struttura interna dei vari > file immagine. > Quel che posso dire è che il LoadPicture di vb6 lo > legge bene. > Di seguito riporto una funzione di quel modulo di > classe di cui parlavo. Alla prima occhiata mi pare che molte delle parti funzionino tipo "se non è zuppa è panbagnato", nel senso che analizza la struttura del BMP dando per scontato che se la palette è 8 bit e' per forza la palette default di windows, da qua la possibile origine dell'errore, ma non avendo VB a casa non posso provare... Comunque: <https://it.wikipedia.org/wiki/Windows_bitmap#Struttura_dettagliata> all'offset 16: "Nella versione 5 del formato sono ammessi inoltre i seguenti valori:" ... png ... jpg La mia idea iniziale è plausibile se il modulo che stai usando non considera/conosce il formato versione 5. Nei tuoi panni i caricherei l'immagine in una variabile con loadpicture (che se non ricordo male usa l'api di windows, qiondi se il S.O. può leggere l'immagine loadpicture restituisce l'immagine bell'ePPronta senza problemi di formato/encoding originale); alla peggio userei l'oggetto webbrowser (che è piu versatile nel caricare l'immagine).
[toc] | [prev] | [next] | [standalone]
| From | Franz_aRTiglio <franzgol@N0SPAMtin.it> |
|---|---|
| Date | 2016-04-28 16:55 +0200 |
| Message-ID | <nft83o$1os3$1@gioia.aioe.org> |
| In reply to | #18795 |
Franz_aRTiglio ha usato la sua tastiera per scrivere :
visto or ora (m'era sfuggito):
offset 14 "profondità di colore dell'immagine in bit per pixel,
dev'essere uno dei seguenti valori: 1, 4, 8, 16, 24 o 32. In caso di 1,
4 o 8 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 JPEG o PNG."
If bfType = "BM" Then
' BITMAPINFOHEADER
Get #fb, , biSize
Get #fb, , biWidth
Get #fb, , biHeight
Get #fb, , biPlanes
Get #fb, , biBitCount
Get #fb, , biCompression
Get #fb, , biSizeImage
Get #fb, , biXPelsPerMeter
Get #fb, , biYPelsPerMeter
Get #fb, , biClrUsed
Get #fb, , biClrImportant
BPP = biBitCount
If BPP <= 8 Then
scommetto che nell'immagine "incriminata" biBitCount ( e quindi BPP )
risulta zero, il modulo da te postato dà per scontato che se e'
inferiore o uguale a 8, BPP e' per forza 1 o 4 e si regola di
conseguenza, senza considerare che può essere una palette di tipo jpg o
png, non mi stupirei di scorire che poi scazza quando conta con
biClrUsed e biClrImportant.
[toc] | [prev] | [next] | [standalone]
| From | "Sauro" <vicchi@crsscala.it> |
|---|---|
| Date | 2016-05-01 09:38 +0200 |
| Message-ID | <ng4bp7$2g0$1@gioia.aioe.org> |
| In reply to | #18796 |
[cut] Ho capito che la routine di Luigi Micco non è perfetta. Non riesco però a seguirti nel dettaglio dei tuoi argomenti. Mi sembra però di capire che il file BMP non sia una semplice rappresentazione dell'immagine con una propria lingua; ma conservi invece caratteristiche diverse a seconda dell'applicazione con la quale è stato creato (o del formato originale dell'immagine). E' così? Ciao Franz e grazie. Sauro
[toc] | [prev] | [next] | [standalone]
| From | Franz_aRTiglio <franzgol@N0SPAMtin.it> |
|---|---|
| Date | 2016-05-01 10:06 +0200 |
| Message-ID | <ng4d8j$4a3$1@gioia.aioe.org> |
| In reply to | #18797 |
Sauro ha spiegato il 01/05/2016 : > [cut] > Ho capito che la routine di Luigi Micco non è perfetta. Non esattamente, diciamo che probabilmente ERA perfetta quando è stata scritta, ma nel frattempo sono usciti nuovi formati... > Non riesco però a seguirti nel dettaglio dei tuoi argomenti. > Mi sembra però di capire che il file BMP non sia una semplice > rappresentazione dell'immagine con una propria lingua; ma > conservi invece caratteristiche diverse a seconda dell'applicazione > con la quale è stato creato (o del formato originale dell'immagine). Non esattamente: il formato si è evoluto e sono stati introdotti dei metodi che all'epoca della routine di micco erano sconosciuti, ovvio che la routine, non conoscendo queste nuove caratteristiche interpreta il flusso dati così come è "abituato", i nuovi programmi (anche il semplice paint) invece conoscono i nuovi metodi e li usano attivamente. Quindi (in semplice) il problema è che stai usanto una tecnica obsoleta per manipolare delle informazioni scritte con metodi piu aggiornati.
[toc] | [prev] | [next] | [standalone]
| From | "Sauro" <vicchi@crsscala.it> |
|---|---|
| Date | 2016-05-01 20:46 +0200 |
| Message-ID | <ng5it1$1ot$1@gioia.aioe.org> |
| In reply to | #18798 |
[cut] > Quindi (in semplice) il problema è che stai usanto una tecnica obsoleta > per manipolare delle informazioni scritte con metodi piu aggiornati. ok Grazie Franz Sauro
[toc] | [prev] | [standalone]
Back to top | Article view | it.comp.lang.visual-basic
csiph-web