Page 1 sur 1

Lire les pixels d'une image

Publié : mar. 01/janv./2008 17:44
par badrs
Bonne année 2008 à tous.
J'utilise un imagegadget et je dessine quelque chose sur l'image source, y'a il un moyen pour lire les couleurs des pixels de cette image?

Publié : mar. 01/janv./2008 18:09
par Chris
Il y a la commande Point(x, y) qui te renvoie la couleur. Ensuite, tu peux récupérer les composantes RVB avec les commandes Red(), Green(), Blue().

Code : Tout sélectionner

StartDrawing(ImageOutput(TonImage))
  Couleur = Point(x, y)

  Rouge = Red(Couleur)
  Vert = Green(Couleur)
  Bleu = Blue(Couleur)
StopDrawing()

Publié : mar. 01/janv./2008 18:12
par badrs
:D merci, j'ai vu cette commande mais j'ai compris que c'est comme plot, donc la tu me sauve la vie, merci

Publié : mar. 01/janv./2008 21:03
par comtois
ou tu peux jouer avec les commandes de l'API

Code : Tout sélectionner

; English forum: http://purebasic.myforums.net/viewtopic.php?t=8736&highlight=
; Author: Danilo (updated for PB3.93 by ts-soft)
; Date: 14. December 2003

; 
; Bitmap Bits Test 
; Danilo, 10.04.2003 

Structure myBITMAPINFO 
  bmiHeader.BITMAPINFOHEADER 
  bmiColors.RGBQUAD[1] 
EndStructure 

Structure s_pixel
  B.b
  V.b
  R.b
  A.b
EndStructure

hBmp = CreateImage(1,300,100) 
hDC  = StartDrawing(ImageOutput(1)) 
  ImageWidth  = ImageWidth(1) 
  ImageHeight = ImageHeight(1) 
    Dim mem.s_pixel(ImageHeight-1, ImageWidth-1)
  bmi.myBITMAPINFO 
  bmi\bmiHeader\biSize   = SizeOf(BITMAPINFOHEADER) 
  bmi\bmiHeader\biWidth  = ImageWidth 
  bmi\bmiHeader\biHeight = ImageHeight 
  bmi\bmiHeader\biPlanes = 1 
  bmi\bmiHeader\biBitCount = 32 
  bmi\bmiHeader\biCompression = #BI_RGB 
  If GetDIBits_(hDC,hBmp,0,ImageHeight(1),mem(),bmi,#DIB_RGB_COLORS) <> 0 
    ; Fill 
    y=45
    For x = 0 To ImageWidth-1 
      mem(y,x)\R = $FF
      mem(y,x)\V = $FF 
      mem(y,x)\B = $00
      mem(y,x)\A = $00 
    Next x 
    
    ; Copy back 
    If SetDIBits_(hDC,hBmp,0,ImageHeight(1),mem(),bmi,#DIB_RGB_COLORS) <> 0 
      StopDrawing() 
      OpenWindow(0,0,0,ImageWidth,ImageHeight,"Image",#PB_Window_ScreenCentered|#PB_Window_SystemMenu) 
        CreateGadgetList(WindowID(0)) 
        ButtonImageGadget(0,0,0,ImageWidth,ImageHeight,hBmp) 
      Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow 
    Else 
      StopDrawing() 
    EndIf 
  EndIf

Publié : mar. 01/janv./2008 21:16
par badrs
tres fort encore les commandes API, pratique et rapide, mais malheureusement pas à la portée de tout le monde, et ce que je me demande en ce moment, c'est où trouver les deux structures BITMAPINFOHEADER RGBQUAD?

Publié : mar. 01/janv./2008 21:20
par comtois
Elles sont déjà déclarées dans PureBasic, sauf si tu as la version démo, dans ce cas tu ne pourras pas faire tourner ce code (il n'y a pas le frameWork des API).

Si tu veux voir à quoi ressemble une structure tu vas dans le menu de l'IDE, outils , puis visualisateur de structures, et clique sur la structure qui t'intéresse pour voir son contenu.

Publié : mar. 01/janv./2008 21:26
par badrs
merci, j'ai tout trouvé, reste à savoir les utiliser une à une