CBITMAP in Pic control anzeigen



  • HI habe ein Bild von einer Kamera, das als HGlOBAL gegeben wird durch CreateBITMAP In ein CBitmap ungewandelt und versuche es anzeigen zu lasen klappt aber nicht.??????????????ß
    Danke für nen Tip

    HGLOBAL ImageFromCamera = GetPCVisionImageSnap();
    CBitmap *pic = new CBitmap();

    BYTE *lpstr;
    LPBITMAPINFOHEADER lpInf;
    lpInf = (LPBITMAPINFOHEADER)GlobalLock(ImageFromCamera);
    int nWidth = lpInf->biWidth;
    int nHeight = lpInf->biHeight;
    WORD nPlanes = lpInf->biPlanes;
    WORD nBitCount = lpInf->biBitCount;
    lpstr = (BYTE *)lpInf+sizeof(BITMAPINFOHEADER);
    lpstr = lpstr+256 * sizeof(RGBQUAD);

    pic->CreateBitmap(nWidth,nHeight,nPlanes,nBitCount,lpstr);
    //pic.Attach(hBmp);
    BITMAP bild_header;
    pic->GetBitmap(&bild_header);

    CWnd* wp = GetDlgItem(IDC_STATIC_CAM2);
    CDC *pDC = wp->GetDC();
    CDC imageDC;
    imageDC.CreateCompatibleDC(pDC);
    imageDC.SelectObject(pic);
    pDC->BitBlt(0,0,bild_header.bmWidth,bild_header.bmHeight,&imageDC,0,0,SRCCOPY);
    imageDC.DeleteDC();
    }



  • Ich versteh zwar nicht warum du einen neuen Thread aufmachen musstest,
    aber hiermal was aus dem Platform SDK:

    The BITMAPINFOHEADER structure contains information about the dimensions and color format of a DIB.

    Dein Ansatz mit CreateBitmap ist also falsch, da es sich offensichtlich
    um ein Device-Independent Bitmap handelt.



  • Danke für den TIp also muß ich eine andrere From der BITMAP generierung finden. ich hatte zuvor ja aus HGLOBAL die größe des Bildes sowie passenden Pointer erzeugt.

    BYTE *lpstr;
    LPBITMAPINFOHEADER lpInf;
    lpInf = (LPBITMAPINFOHEADER)GlobalLock(ImageFromCamera);
    int nWidth = lpInf->biWidth;
    int nHeight = lpInf->biHeight;
    WORD nPlanes = lpInf->biPlanes;
    WORD nBitCount = lpInf->biBitCount;
    lpstr = (BYTE *)lpInf+sizeof(BITMAPINFOHEADER);
    lpstr = lpstr+256 * sizeof(RGBQUAD);

    daraus wollte ich ja dann über create BITMAP eines vom TYp CBITMAP erzeugen.
    Ich kenne auch nicht den UNterschied zu Device independant bitmap muß mir das dann mal anschauen. Mein Problem ist, das ich irgendwie aus dem HGLOBAL einen BITMAP machen muß um das Bild in meinem Dialog anzeigen zu lassen.

    😕



  • HI

    also müßte ich LPBITMAPINFOHEADER ändern um create nutzen zu könne? Will ja ein BITMAP anzeigen und kein Video. Aber was ich nicht verstehe , wieso klappt das nit mit Create ich übergebe dem Create doch die Eigenschaften und einen Pointer auf das Bild.
    ??



  • die Funktion, die mir dieses HGLOBAL liefert sieht folgendermaßen aus.
    bin jetzt schon seit 3 Tagen dran das anzeigen zu lassen.

    hilfEEEEEEEEEEEEEEEEEEEEEEEEEEEEE

    😮 ⚠

    HGLOBAL GetPCVisionImageSnap()
    {
    BYTE *m_lpstr;

    int iLoop;
    long len;
    RGBQUAD lpRgb;
    LPBITMAPINFOHEADER lpInf;
    len = m_ImageMaxX * m_ImageMaxY;
    HGLOBAL hBmp = GlobalAlloc (GMEM_FIXED,(LONG)sizeof(BITMAPINFOHEADER)+256
    sizeof(RGBQUAD)+len);
    lpInf = (LPBITMAPINFOHEADER)GlobalLock(hBmp);
    lpInf->biSize=sizeof(BITMAPINFOHEADER);
    lpInf->biWidth=m_ImageMaxX;
    lpInf->biHeight=m_ImageMaxY;
    lpInf->biPlanes=1;
    lpInf->biBitCount=8;
    lpInf->biCompression=BI_RGB;
    lpInf->biSizeImage=m_ImageMaxX*m_ImageMaxY;
    lpInf->biXPelsPerMeter=0;
    lpInf->biYPelsPerMeter=0;
    lpInf->biClrUsed=256;
    lpInf->biClrImportant=0;
    m_lpstr= (BYTE *)lpInf+sizeof(BITMAPINFOHEADER);
    lpRgb=(RGBQUAD *)m_lpstr;
    for (iLoop = 0; iLoop < 256; iLoop++)
    {
    lpRgb->rgbBlue=(BYTE)iLoop;
    lpRgb->rgbGreen=(BYTE)iLoop;
    lpRgb->rgbRed =(BYTE)iLoop;
    lpRgb->rgbReserved =(BYTE)0;
    lpRgb++;
    }
    m_lpstr=m_lpstr+256 * sizeof(RGBQUAD) ;
    itx_host_snap(m_fghIcp0,m_lpstr);

    HGLOBAL hBmpTmp=mirror_yBMP(hBmp);
    GlobalFree(hBmp);
    // GlobalUnlock(hBmpTmp);
    return hBmpTmp;
    }



  • Bin jetzt auch von dem Create abgekommen. Versuche es direkt als BITMAP auszu geben.

    HBITMAP ImageFromCamera = (HBITMAP)GetPCVisionImageSnap();

    CBitmap pic1;
    pic1.Attach(ImageFromCamera);
    BITMAP bild_header1;
    pic1.GetBitmap(&bild_header1);

    CWnd* wp1 = GetDlgItem(IDC_BUTTON1);// IDC_STATIC_CAM1
    CDC *pDC1 = wp1->GetDC();
    CDC imageDC1;
    imageDC1.CreateCompatibleDC(pDC1);
    imageDC1.SelectObject(&pic1);
    pDC1->BitBlt(0,0,bild_header1.bmWidth,bild_header1.bmHeight,&imageDC1,0,0,SRCCOPY);
    imageDC1.DeleteDC();
    GlobalUnlock(ImageFromCamera);


Anmelden zum Antworten