cs_AlexCore
Messages postés3Date d'inscriptionvendredi 25 avril 2008StatutMembreDernière intervention19 janvier 2011
-
7 oct. 2010 à 15:34
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 2021
-
8 oct. 2010 à 15:52
Bonjour,
je cherche à convertir une image bitmap 32bit vers le format 24Bit.
on va dire que ça fonctionne. mais pas à tous les coups...
des fois, mon image 24 bit est déformée. ( un peu en biais. )
voici le code :
Private Type BITMAPINFOHEADER
biSize As Long
biWidth As Long
biHeight As Long
biPlanes As Integer
biBitCount As Integer
biCompression As Long
biSizeImage As Long
biXPelsPerMeter As Long
biYPelsPerMeter As Long
biClrUsed As Long
biClrImportant As Long
End Type
Private Type BITMAPFILEHEADER
bfType As Integer
bfSize As Long
bfReserved1 As Integer
bfReserved2 As Integer
bfOffBits As Long
End Type
Type hdr_type
f As BITMAPFILEHEADER
i As BITMAPINFOHEADER
End Type
Const BI_RGB = 0
Sub ConvertBitmap32to24() '(ByVal fileName As String)
Dim hdr As hdr_type
Dim fi As Integer, fo As Integer
Dim position As Long
Dim b32(3) As Byte, b24(2) As Byte
Dim FileName As String
FileName = "c:\result.bmp" ' image 32 bit
fi = FreeFile
Open FileName For Binary As #fi
fo = FreeFile
Open Mid(FileName, 1, Len(FileName) - 4) & "_24bit.bmp" For Binary As #fo
position = 1
Get #fi, position, hdr
position = position + Len(hdr)
If hdr.f.bfType &H4D42 And (hdr.f.bfReserved2 0 And hdr.f.bfReserved1 = 0) And _
hdr.i.biBitCount 32 And hdr.i.biCompression BI_RGB Then
hdr.i.biBitCount = 24
hdr.f.bfSize = hdr.i.biWidth * 3 * hdr.i.biHeight + Len(hdr)
hdr.i.biSizeImage = 0
Put #fo, , hdr
While Not EOF(fi)
Get #fi, position, b32
position = position + 4 ' on lit par 4 octets dans un 32 bit...
b24(0) = b32(0)
b24(1) = b32(1)
b24(2) = b32(2) ' et on en réécrit 3 dans le 24 bit
Put #fo, , b24
Wend
Else
MsgBox "Format Bitmap non conforme...", vbCritical, "conversion bmp"
End If
Close #fi
Close #fo
'Kill FileName
Erase b24
Erase b32
End Sub
voilà..
si quelqu'un a l'amabilité de tester, pour voir.. et surtout pour aider à mettre le doigt sur ce qui cloche...