Page 1 sur 1

API GetObject

Publié : mer. 04/juil./2007 18:51
par nico
Salut,

Je me demande comment utiliser l'API GetObject pour connaitre la couleur d'un point à partir d'une position curseur x et y :?:

GetObject_(ImageID(0), SizeOf(BITMAP), bmp.BITMAP)

Publié : mer. 04/juil./2007 19:08
par minirop
tu es sur que c'est "get object" ? parce que dans la msdn je ne trouve que ceci :.
http://msdn2.microsoft.com/en-us/library/aa392779.aspx

Publié : mer. 04/juil./2007 19:20
par nico

Publié : mer. 04/juil./2007 20:52
par nico
D'après mes résultats, ça donnerait ça:

Pour une image 32 bits, avec une image 24 bits il faudra utiliser un autre code

Code : Tout sélectionner

Structure RGBA 
    Red.c
    Green.c
    Blue.c
    Alpha.c
EndStructure

GetCursorPos_(@point.POINT)
ScreenToClient_(Window,@point)

If point\x<bmp\bmWidth And point\x>=0
    If point\y<bmp\bmHeight And point\y>=0
        *bits.RGBA = bmp\bmBits
        *bits=*bits+4*point\y*bmp\bmWidth
        *bits=*bits+(point\x*4)
        Debug *bits\Red
    EndIf 
EndIf 

Publié : mar. 17/juil./2007 1:20
par nico
Le format png est étrange:

Si je charge une image png, alors les bits data vont du haut vers le bas et de gauche à droite ce qui n'est pas normal et le code posté au dessus correspond à ce cas là.

Maintenant si je fais un GrabImage, il vont du bas vers le haut et de gauche à droite, ce qui est normal je crois.

Dans ce cas pour retrouver le pixel par rapport à la position de la souris sur l'image, le calcul est le suivan, toujours pour une image au format 32 bitst:

Decalage=(((Hauteur-1-y)*Largeur)+x)*4

soit:*bits=*bits+(((bmp\bmHeight-1-point\y)*bmp\bmWidth)+point\x)*4