Lire les pixels d'une image

Programmation avancée de jeux en PureBasic
badrs
Messages : 13
Inscription : sam. 29/déc./2007 5:52

Lire les pixels d'une image

Message 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?
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message 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()
badrs
Messages : 13
Inscription : sam. 29/déc./2007 5:52

Message 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
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Message 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
http://purebasic.developpez.com/
Je ne réponds à aucune question technique en PV, utilisez le forum, il est fait pour ça, et la réponse peut profiter à tous.
badrs
Messages : 13
Inscription : sam. 29/déc./2007 5:52

Message 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?
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Message 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.
http://purebasic.developpez.com/
Je ne réponds à aucune question technique en PV, utilisez le forum, il est fait pour ça, et la réponse peut profiter à tous.
badrs
Messages : 13
Inscription : sam. 29/déc./2007 5:52

Message par badrs »

merci, j'ai tout trouvé, reste à savoir les utiliser une à une
Répondre