Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : setpixel couleur [ Windows / Autre ] (abdoulax)

lundi 23 juin 2008 à 17:27:24 | setpixel couleur

abdoulax

Bonjour,

Je voudrais écrire dans ma fenêtre pixel par pixel. Pour cela je souhaite passer par une zone mémoire temporaire avant de la recopier (une fois tous les pixels modifier) sur l'écran. Je pense donc utilisé un HBITMAP mais j'ai un problème au niveau des couleurs. Dans le code suivant, je ne peux avoir que du noir ou du blanc. Comment avoir 256 couleurs et même plus? De plus, j'aimerai savoir si ce que j'ai fait vous paraît correct?


LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
        HDC hdc;
        PAINTSTRUCT paintst;
        HDC memHdc;
        HBITMAP hBitmap;
       
        COLORREF color;
        int n;
 
    switch (message)                  /* handle the messages */
    {
        case WM_PAINT:
        //case WM_CREATE:
             hdc=BeginPaint(hwnd,&paintst);
             memHdc=CreateCompatibleDC(hdc);
             hBitmap = CreateCompatibleBitmap(memHdc,480,272);
             SelectObject(memHdc, hBitmap);
            
             color=0x00FFFF00; //0x00bbggrr
            
             for (n=10;n<100;n++)
                 SetPixel(memHdc,n,10, color);

             BitBlt(hdc,0,0,480,272,memHdc,0,0,SRCCOPY);
            return 0;
        case WM_DESTROY:
            PostQuitMessage (0);       /* send a WM_QUIT to the message queue */
            break;
        default:                      /* for messages that we don't deal with */
            return DefWindowProc (hwnd, message, wParam, lParam);
    }

    return 0;
}



Have Fun ...

lundi 23 juin 2008 à 17:53:53 | Re : setpixel couleur

Pistol_Pete

Réponse acceptée !

Salut

Voici un exemple qui marche:

LRESULT CALLBACK MainWndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)

{

HDC hdc;

static HDC memHdc;

static HBITMAP hBitmap;

COLORREF color;

int n;

switch (message) /* handle the messages */

{

case WM_CREATE:

memHdc=CreateCompatibleDC(NULL);

HDC H;

H=GetDC(hwnd);

hBitmap = CreateCompatibleBitmap(H,480,272);

ReleaseDC(hwnd,H);

SelectObject(memHdc, hBitmap);

color=0x000000FF; //0x00bbggrr

for (n=10;n<100;n++)

for (int i=0;i<100;i++)

SetPixel(memHdc,n,i, color);

break ;

case WM_PAINT:

PAINTSTRUCT paintst;

hdc=BeginPaint(hwnd,&paintst);

BitBlt(hdc,0,0,480,272,memHdc,0,0,SRCCOPY);

EndPaint(hwnd,&paintst);

return 0;

case WM_DESTROY:

PostQuitMessage (0); /* send a WM_QUIT to the message queue */

break ;

default : /* for messages that we don't deal with */

return DefWindowProc (hwnd, message, wParam, lParam);

}

return 0;

}

Il faut creer ton HBitmap et ton memDC dans le message WM_CREATE et non pas dans le WM_PAINT. Le messaeg paint est envoyer en rafale et il est inutile de le faire a chaque fois. J'ai changer aussi ta maniere de les creer:

memHdc=CreateCompatibleDC(NULL);

HDC H;

H=GetDC(hwnd);

hBitmap = CreateCompatibleBitmap(H,480,272);

A+
Mon site internet : [ Lien ]


lundi 23 juin 2008 à 18:01:20 | Re : setpixel couleur

abdoulax

Merci, je regarde sa demain ;)

Have Fun ...



Cette discussion est classé dans : message, hwnd, hdc, hbitmap, memhdc


Répondre à ce message

Sujets en rapport avec ce message

[api]Plusieurs images dans un dcMem, ou plusieurs dcMem [ par hoGan ] Bonjour à tous,j'aimerais pouvoir afficher plusieurs images l'une à la suite de l'autre en cliquant plusieurs fois sur un bouton. Voici la façon dont Inserer les images dans l'executable [ par juju0169 ] Bonjour à tous!!!Je voudrais savoir si quelqu'un pourrait l'aider à adapter cette fonction (qui marche) pour ne plus specifie l'adresse de mes images Effacer les graphiques avec InvalidateRect !? [ par Suisse00 ] Dans plusieurs source je voie qu'il utilise InvalidateRect  pour "effacer". Mais dans mon cas sa fait en sorte que je recois toujours WM_PAINT (et don redimentionnement d'image, aidez-moi svp [ par sousou_one ] salut à tous,je veux construire une bitmap par copie d'une région d'une bitmap source, je dois prendre les nouvelles dimensions en sélectionnant la ré Decalement de 3 pixel dans le HDC [ par SnOOpss ] Bonjour !!! Pourquoi si je fait :     case WM_PAINT:         {     RECT rt;     PAINTSTRUCT ps;     HDC hdc = BeginPaint(GetParent(hwnd), &a HELP!! comment rafraichir [ par kuruma ] LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam){   static string chemin;  static int count=0;  static bool se Lire le buffer de pixels a partir d'un HBITMAP [ par Kazuya ] Bonjour,j'ai un probleme pour passer un Bitmap en 32bpp,je charge le fichier en memoire (HBITMAP) et ensuite je tente de le modifier, mais le probleme Update screen win32 [ par MoDDiB ] Voilà j'ai un problème avec le rafraichissement de ma fenêtre en win32 je m'explique : je dessine une ligne à l'aide de :             HDC      &nbsp Contrôle windows sur surface DirectDraw [ par rom2n ] Bonjours a tous, je suis en train de développer un jeu en 2D avec DirectDraw et je voulais savoir comment on pouvais affiché un contrôle windows sur u Fenetre fille [ par mogwai93 ] Bonjour, je cherche à inserer dans une zone d'une fenetre, une autre fenetre avec scrollbar. sauf que, j'ai des resultats bizarres : --------- LRESU


Nos sponsors

Sondage...

CalendriCode

Décembre 2008
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

Téléchargements



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 3,588 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.