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 : HELP !!!!!!!!!! urgent [ Windows / MFC ] (CeNedra83)

jeudi 18 mai 2006 à 11:40:59 | HELP !!!!!!!!!! urgent

CeNedra83

je code en C++ avec interface en MFC.
je dispose d'une image sous la forme d'un tableau de points RGB, et je voudrais l'afficher à l'écran dans un picture control (ou autre???)
si je le fais pixel par pixel avec setPixel, c'est trop  long!!
qqn a une idée de comment faire?

merci!!

jeudi 18 mai 2006 à 21:36:36 | Re : HELP !!!!!!!!!! urgent

SAKingdom

Membre Club
En MFC, je sais pas trop mais normalement, on stock toute les données de couleur dans un tableau BYTE puis on utilise SetDIBitsToDevice pour l'affiche à l'écran. Tien voici un exemple d'un programme complet en Win32 API:

#include <windows.h>

BITMAPINFO dib;

HRESULT WndProc (HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    PAINTSTRUCT ps;

    switch(message)
    {
    case WM_CREATE:

        ZeroMemory(&dib, sizeof(dib));

        dib.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
        dib.bmiHeader.biHeight = 150;
        dib.bmiHeader.biWidth = 150;
        dib.bmiHeader.biPlanes = 1;
        dib.bmiHeader.biBitCount = 24;
        dib.bmiHeader.biCompression = BI_RGB;
        break;

    case WM_PAINT:
        {
            HDC hDC=BeginPaint(hWnd, &ps);


            DWORD bytewidth = 4*((3*150+3)/4);

            LPBYTE lpBits = new BYTE[bytewidth*150];

            if (!(lpBits)) { return NULL; }

           int tmp = 0;

    for (int y = 50; y < 100; y++)
    {
        for (int x = 50; x < 100; x++)
        {

            tmp = (150-y-1)*bytewidth+3*x;


             lpBits[tmp]=0;
             lpBits[tmp+1]=255;
             lpBits[tmp+2]=0;

        }
    }

            SetDIBitsToDevice(hDC, 0, 0, 150, 150, 0, 0, 0, 150, lpBits, &dib, DIB_RGB_COLORS);

            EndPaint(hWnd, &ps);
        }
    break;
  
    case WM_DESTROY:
            PostQuitMessage(0);
            break;

    default:
        return DefWindowProc(hWnd, message, wParam, lParam);
    }

    return FALSE;
}

int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR     lpCmdLine,
                     int       nCmdShow)
{
     WNDCLASSEX wcex;
    MSG msg;

    wcex.cbSize = sizeof(WNDCLASSEX);

    wcex.style            = CS_HREDRAW | CS_VREDRAW;
    wcex.lpfnWndProc    = (WNDPROC)WndProc;
    wcex.cbClsExtra        = 0;
    wcex.cbWndExtra        = 0;
    wcex.hInstance        = hInstance;
    wcex.hIcon            = 0;
    wcex.hCursor        = LoadCursor(NULL, IDC_ARROW);
    wcex.hbrBackground    = (HBRUSH)(COLOR_WINDOW);
    wcex.lpszMenuName    = 0;
    wcex.lpszClassName    = "test";
    wcex.hIconSm        = 0;

    RegisterClassEx(&wcex);

    HWND hWnd = CreateWindow("test", "test", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 150, 150, NULL, NULL, hInstance, NULL);

   if (!hWnd)
   {
       MessageBox(0, "Impossible", 0, 0);
      return FALSE;
   }

    ShowWindow(hWnd, SW_SHOW);
   UpdateWindow(hWnd);

   while (GetMessage(&msg, NULL, 0, 0))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }

    return 0;
}

___________________________________________
Les plus grands esprits trouvent toujours une solution


vendredi 19 mai 2006 à 01:07:11 | Re : HELP !!!!!!!!!! urgent

SAKingdom

Membre Club
J'ai oublié le delete:
case WM_PAINT:
        {
            HDC hDC=BeginPaint(hWnd, &ps);


            DWORD bytewidth = 4*((3*150+3)/4);

            LPBYTE lpBits = new BYTE[bytewidth*150];

            if (!(lpBits)) { return NULL; }

           int tmp = 0;

    for (int y = 50; y < 100; y++)
    {
        for (int x = 50; x < 100; x++)
        {

            tmp = (150-y-1)*bytewidth+3*x;


             lpBits[tmp]=0;
             lpBits[tmp+1]=255;
             lpBits[tmp+2]=0;

        }

    delete[] lpBits;
    }

Si ça peut t'aider, j'ai publier une source qui explique le fonctionnment de SetDIBitsToDevice. C'est en Win32 API mais la facon de l'utiliser doit rester la même je suppose.
EXEMPLE-UTILISATION-SETDIBITSTODEVICE

___________________________________________
Les plus grands esprits trouvent toujours une solution




Cette discussion est classé dans : help, urgent, pixel


Répondre à ce message

Sujets en rapport avec ce message

TRES URGENT PLEASE HELP ME : MAIL EN VISUAL C++ [ par SidSilver ] j'aurais besoin d'aide... j'essaie d'envoyer un mail avec piece jointe dans un programme en visual c++si possible donnez moi un max de detail et des e HElp URGENT Calcul de transmision d'une commande?? [ par tabounator ] jé besoin d'aide. demin je passe la derniere epreuve de mon bts informatque sur notre theme de fin d'année.jé peur d'une question qui et : dite moi co HELP sur ShllFold2 URGENT!!!! [ par CeNedra83 ] Salut,J'ai récupéré le code source de ShllFold2, un programme qui réalise un sélecteur de répertoire. J'ai moi meme crée ma fenetre de dialogue, et lo aie aie aie API MFC c URGENT help [ par haribo ] slt a tousg besoin de savoir comment on utilise l'api VFW. j'aurai besoin d1 process ou bien d1 code pour afficher le contenu de ma webcam. C pour mon Help meeeee ! urgent [ par Vermifuge ] il me faudrait une librairie pour décompresser les fichiers ACE( il me semble qu'elle s'appelle ace.lib )C urgent...envoyez la à vermifuge@fr.st HELP !! test pixel ds une image bmp [ par jujuesiea ] suis a la recherche d'un prog en C permettant de rechercher un pixel d'une certaine couleur ds une image et de stocker les coord de ce pixel, puis de Help urgent interface en C++ utilisant directX [ par CeNedra83 ] Salut,J'ai récupéré une source appelée à l'origine interface01. Elle affiche en utilisant directX une image en plein écran avec un menu. Je l'ai modif Bonjour projet futoshiki urgent help [ par walidbigboss1 ] bonjour mes amis je suis débutant en c et je veux réaliser mon projet de ma licence  que je comprend pratiquement rien avec les greves et les abscence Bitmap et pixel [ par wxccxw ] Bonsoir, quelqu'un connaiterait-il la facon dont il faut s'y prendre pour charger un BMP de 320*240 et recuperer la couleur en R G B (0 a 255) de c aide en langage c !!urgent [ par sinzo ] bonjour ,  svp je suis bloqué dans une partie de mon mini projet..j'ai un arbre n aire dont chaque noeud contient une lettre , et je vx afficher tous


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

Comparez les prix Nouvelle version


LG KP501

Entre 9€ et 159€


Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), 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 : 0,437 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é.