CONVERTION IMAGE EN NIVEAUX DE GRIS

cs_clementpat Messages postés 406 Date d'inscription lundi 2 décembre 2002 Statut Membre Dernière intervention 25 janvier 2014 - 3 févr. 2003 à 17:44
ennixo Messages postés 224 Date d'inscription samedi 25 janvier 2003 Statut Membre Dernière intervention 17 juin 2006 - 21 mai 2004 à 12:17
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/5393-convertion-image-en-niveaux-de-gris

ennixo Messages postés 224 Date d'inscription samedi 25 janvier 2003 Statut Membre Dernière intervention 17 juin 2006
21 mai 2004 à 12:17
Suffit de demander !

' DECLARATIONS
Public Type BITMAP
bmType As Long
bmWidth As Long
bmHeight As Long
bmWidthBytes As Long
bmPlanes As Integer
bmBitsPixel As Integer
bmBits As Long
End Type

Public Declare Function GetObject Lib "gdi32" Alias "GetObjectA" (ByVal hObject As Long, ByVal nCount As Long, lpObject As Any) As Long
Public Declare Function GetBitmapBits Lib "gdi32" (ByVal hBitmap As Long, ByVal dwCount As Long, lpBits As Any) As Long
Public Declare Function SetBitmapBits Lib "gdi32" (ByVal hBitmap As Long, ByVal dwCount As Long, lpBits As Any) As Long


' INVERSION
' ce code est à mettre à l'endroit ou on veut inverser l'image
' dans un click de bouton par exemple

' P est la pictureBox contenant l'image qu'on veut inverser.
' AutoSize = True
' AutoRedraw = True

Dim i As Long
Dim iMax As Long

GetObject P.Image, Len(PicInfo), PicInfo

BytesPerLine = (PicInfo.bmWidth * 3 + 3) And &HFFFFFFFC
ReDim PicBits(1 To BytesPerLine * PicInfo.bmHeight * 3)

GetBitmapBits P.Image, UBound(PicBits), PicBits(1)

iMax = UBound(PicBits)

For i = 1 To iMax Step 4
PicBits(i) = Not PicBits(i)
PicBits(i + 1) = Not PicBits(i + 1)
PicBits(i + 2) = Not PicBits(i + 2)
Next i

SetBitmapBits P.Image, UBound(PicBits), PicBits(1)

P.Refresh





' et voilà ! Il est a noté que pour plus de rapidité, il faut compiler le code
' et dans Projet > Propriétés, onglet Compilation
' il faut Optimiser pour la rapidité du code
' et dans
' Optimisations avancées :
' cocher toutes les cases.
ebe_tic Messages postés 15 Date d'inscription jeudi 4 décembre 2003 Statut Membre Dernière intervention 14 mars 2006
21 mai 2004 à 09:05
Ce n'est peut être pas très rapide mais c'est très efficace ! Bravo, c'est ce que je cherchais.
Ennixo: as tu un exemple utilisant les bitmapbits ?
ennixo Messages postés 224 Date d'inscription samedi 25 janvier 2003 Statut Membre Dernière intervention 17 juin 2006
5 nov. 2003 à 15:10
C'est terriblement LENT !!!!
en utilisant des bitmabits je mets 0.391 sec pour désaturer une image en 2048 * 1536 !!!!
penses aux BITMAPBITS !!!
cs_clementpat Messages postés 406 Date d'inscription lundi 2 décembre 2002 Statut Membre Dernière intervention 25 janvier 2014
3 févr. 2003 à 17:44
super programme , sans api ,bravo tres bien fait, felicitation 10/10
Rejoignez-nous