[wxWidget] Analyser une image [résolu]

Analyser une image [résolu] [wxWidget] - C++ - Programmation

Marsh Posté le 31-01-2005 à 19:08:31    

Bonjour à tous !
 
Je vous explique mon problème :
 
j'affiche des images GIF avec de la transparence dans ma fenêtre wxWidget. Mon but est de pouvoir selectionner ces images en cliquant sur une zone non-transparente de ces images. De ce fait, j'ai besoin de savoir, au moment du click si je suis sur un pixel transparent ou non... Je ne sais absolument pas comment faire ça donc si vous aviez une suggestion ce serait super !
 
Merci !
 
A+


Message édité par Nitro68 le 02-02-2005 à 19:51:35
Reply

Marsh Posté le 31-01-2005 à 19:08:31   

Reply

Marsh Posté le 31-01-2005 à 19:36:33    

A vue de nez et sans compiler:
 
 

Code :
  1. BEGIN_EVENT_TABLE(ImageCanvas, wxScrolledWindow)
  2.   EVT_LEFT_DOWN(ImageCanvas::Clickage)
  3. END_EVENT_TABLE()
  4. wxBitmap monBitmap("truc.gif", wxBITMAP_TYPE_GIF);
  5. wxImage img = monBitmap.ConvertToImage();
  6. bool isDansLeVide(const wxImage & img, int x, int y)
  7. {
  8.   if (img.HasAlpha())
  9.      return img.GetAlpha(x,y) == 0;
  10.   // assume we're not using the alpha channel, but we have a mask
  11.   assert(img.HasMask());
  12.   bool sameColorAsMask = img.GetGreen(x,y) == img.GetMaskGreen()
  13.      && img.GetRed(x,y) == img.GetMaskRed(x,y)
  14.      && img.GetBlue(x,y) == img.GetMaskBlue(x,y);
  15.   return sameColorAsMask;
  16. void Clickage(wxMouseEvent & event)
  17. {
  18.    int x,y;
  19.    event.GetPosition(x,y);
  20. // ici, faire un  GetViewStart() si nécessaire.
  21.   bool vide = isDansLeVide(img, x, y);
  22. }


 
Perso, je trouve la gestion de la transparence assez mal fichue par défaut. Je préfère largement la gestion du canal alpha qu'il y a avec les PNG dans la version 2.5.3.

Reply

Marsh Posté le 31-01-2005 à 19:52:45    

Merci beaucoup ! Je vais tester ça tout de suite :)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed