begin process at 2012 02 11 15:58:37
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Windows

 > 

MFC

 > 

HELP !!!!!!!!!! urgent


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

HELP !!!!!!!!!! urgent

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ée 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 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 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 help!!!!! [ par CeNedra83 ] je réalise une interface pour enfant sous visual C++ en utilisant directX.comment faire pour que l'interface reste par dessus toute les autres et je v HELP!!!!!!!!!!!!!!!!!!!!!!!!!!! [ par CeNedra83 ] J'ai récupéré une source ou chaque classe esr décrite dans un .h. Je voudrais la séparer en un .h et un .cpp mais cela ne marche pas. j'obtiens l'erre


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,655 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales