pour les pros de gdi+, j'ai vraiment besoin d'aide...
pour les pros de gdi+, j'ai vraiment besoin d'aide... - VB/VBA/VBS - Programmation
MarshPosté le 27-10-2004 à 12:14:16
Salut tout le monde. J'ai un très gros souci avec un projet que je développe. Je cherche depuis deux semaine sans aucun résultat positif.
J'ai besoin de convertir une image bmp 24 bits en niveau de gris. J'ai une fonction qui me fait très bien ça sauf que... Ca me génère une image avec une palette de couleur de 32 bits!!! Je suis complètement perdu. J'aimerai donc pouvoir générer une bitmap avec un format de pixel codé sur 8bits.
J'ai exactement le même problème avec une fonction qui me génère du noir et blanc... je me retrouve avec une image bmp 32 bits...
Si quelqu'un pouvait m'aider ne serait ce qu'un peu. Je galère vraiment trop là.
Merci d'avance.
Loïc
PS: voici ma fonction de convertion d'image en niveau de gris:
je passe le handle de ma bitmap 24 bits en paramètre. (image créée avec gdpcreateBitmapFromFile) la fonction me retourne un handle vers une nouvelle image niveau de gris (mais c'est de la palette 32bpp )...
Public Function SetGreyScale(nNativeImage as long) As Long
Dim nGraphics As Long Dim nNewBmp As Long Dim nHeight As Long Dim nWidth As Long Dim imgAttr As Long, clrMatrix As ColorMatrix Dim sngContrast As Single
Marsh Posté le 27-10-2004 à 12:14:16
Salut tout le monde. J'ai un très gros souci avec un projet que je développe. Je cherche depuis deux semaine sans aucun résultat positif.
J'ai besoin de convertir une image bmp 24 bits en niveau de gris. J'ai une fonction qui me fait très bien ça sauf que... Ca me génère une image avec une palette de couleur de 32 bits!!! Je suis complètement perdu. J'aimerai donc pouvoir générer une bitmap avec un format de pixel codé sur 8bits.
J'ai exactement le même problème avec une fonction qui me génère du noir et blanc... je me retrouve avec une image bmp 32 bits...
Si quelqu'un pouvait m'aider ne serait ce qu'un peu. Je galère vraiment trop là.
Merci d'avance.
Loïc
PS: voici ma fonction de convertion d'image en niveau de gris:
je passe le handle de ma bitmap 24 bits en paramètre. (image créée avec gdpcreateBitmapFromFile)
la fonction me retourne un handle vers une nouvelle image niveau de gris (mais c'est de la palette 32bpp )...
Public Function SetGreyScale(nNativeImage as long) As Long
Dim nGraphics As Long
Dim nNewBmp As Long
Dim nHeight As Long
Dim nWidth As Long
Dim imgAttr As Long, clrMatrix As ColorMatrix
Dim sngContrast As Single
sngContrast = 0.35
nHeight = GetHeight
nWidth = GetWidth
clrMatrix.m(0, 0) = sngContrast: clrMatrix.m(1, 0) = sngContrast: clrMatrix.m(2, 0) = sngContrast: clrMatrix.m(3, 0) = 0: clrMatrix.m(4, 0) = 0
clrMatrix.m(0, 1) = sngContrast: clrMatrix.m(1, 1) = sngContrast: clrMatrix.m(2, 1) = sngContrast: clrMatrix.m(3, 1) = 0: clrMatrix.m(4, 1) = 0
clrMatrix.m(0, 2) = sngContrast: clrMatrix.m(1, 2) = sngContrast: clrMatrix.m(2, 2) = sngContrast: clrMatrix.m(3, 2) = 0: clrMatrix.m(4, 2) = 0
clrMatrix.m(0, 3) = 0: clrMatrix.m(1, 3) = 0: clrMatrix.m(2, 3) = 0: clrMatrix.m(3, 3) = 1: clrMatrix.m(4, 3) = 0
clrMatrix.m(0, 4) = 0: clrMatrix.m(1, 4) = 0: clrMatrix.m(2, 4) = 0: clrMatrix.m(3, 4) = 0: clrMatrix.m(4, 4) = 1
Call GdipCreateImageAttributes(imgAttr)
Call GdipSetImageAttributesColorMatrix(imgAttr, ColorAdjustTypeDefault, True, clrMatrix, ByVal 0, ColorMatrixFlagsDefault)
Call GdipGetImageGraphicsContext(nNativeImage, nGraphics)
Call GdipCreateBitmapFromGraphics(nWidth, nHeight, nGraphics, nNewBmp)
Call GdipDeleteGraphics(nGraphics) ' Cleanup so we can reuse the variable
Call GdipGetImageGraphicsContext(nNewBmp, nGraphics)
Call GdipDrawImageRectRectI(nGraphics, nNativeImage, 0, 0, nWidth, nHeight, 0, 0, nWidth, nHeight, UnitPixel, imgAttr)
Call GdipDisposeImageAttributes(imgAttr)
GdipDisposeImage nNativeImage
nNativeImage = nNewBmp
GdipDeleteGraphics nGraphics
Call GdipDisposeImage(nNativeImage)
SetGreyScale = nNewBmp
End Function