Posted By: Bubrak (Alencin) on 'CZprogram'
Title: Re: DIBitmap, problemek..
Date: Tue Jan 7 23:51:33 2003
> Bube, hlavne si precti dokumentaci, protoze s tim jak to delas hodne brzo
> dojedes. bmiColors je opravdu jenom placeholder jak psal pivson a je to tam
Dokumentaci si ctu dycky nejdriv, neboj. ;o) Akorat sem z toho casto zmatenej.
> proto, aby se s tim jednodus epracovalo. Ale ten kus pameti ma vypadat tak,
> ze je BITMAPINFOHEADER nasledovany polem RGBQUADu anebo polem WORDu s
> paletou. To co to je a hlavne kolik toho tam je zalezi na biBitCount a
> biClrUsed v BITMAPINFOHEADER a parametrech funkci co s tim volas. Pokud
> budes
> slepe predpokladat ze je tam jen jeden RGBQUAD tak brzo dojedes na ochranu
> pameti...
No, vypada to spis naopak, ted sem zkusil tam narvat width*height RGBQUADu a
hazi to exception. Na to sem ale zvyklej. ;o) Ted to jen odladit...
Potrebuju proste natahnout z disku bitmapu, prevyst ji do formatu, kterej
potrebuju (24 bitu, bez komprese) a tudle bitmapu (jen data) pak nacist do
pole, s kterym pak budu moct rychle pracovat (nez udajne pres GetPixel).
No a mam zatim todle:
CBitmap vDDBitmap;
HBITMAP hDDBitmap;
BITMAPINFOHEADER vDDBHeader;
BITMAPINFO vDDBInfo;
int vDDBInitData[3];
CClientDC dc(this);
vDDBHeader.biSize=3*pDoc->m_panoramaCHeight*pDoc->m_panoramaCWidth;
// predpokladam, ze 1 pixel ma 3 byty
vDDBHeader.biWidth=pDoc->m_panoramaCWidth;
vDDBHeader.biHeight=pDoc->m_panoramaCHeight;
vDDBHeader.biPlanes=1;
vDDBHeader.biBitCount=24;
vDDBHeader.biCompression=BI_RGB;
vDDBHeader.biSizeImage=0;
vDDBHeader.biXPelsPerMeter =3750;
vDDBHeader.biYPelsPerMeter =3750;
vDDBHeader.biClrUsed =0;
vDDBHeader.biClrImportant =0;
RGBQUAD vRGBQuad[1];
vRGBQuad[0].rgbRed=255;
vRGBQuad[0].rgbGreen=255;
vRGBQuad[0].rgbBlue=255;
vRGBQuad[0].rgbReserved=0;
vDDBInfo.bmiHeader=vDDBHeader;
for (int i=0;i<pDoc->m_panoramaCWidth*pDoc->m_panoramaCHeight;i++) {
vRGBQuad[0].rgbRed=255;
vRGBQuad[0].rgbGreen=255;
vRGBQuad[0].rgbBlue=255;
vRGBQuad[0].rgbReserved=0;
vDDBInfo.bmiColors[i]= vRGBQuad[0];
}
hDDBitmap=CreateDIBitmap(dc,&vDDBHeader,CBM_INIT,&vDDBInitData,&vDDBInfo,DIB_R
GB_COLORS);
vDDBitmap.Attach(hDDBitmap);
// mam DIBku, prevedu do ni natazenou bitmapu...
Bub
>
>
> Jerry III
>
> Enough said ...
> http://jerryiii.home.sprynet.com/mica/index.htm
Kdo brzdi, ten ztraci.
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
E-mail: j.kubrt@sh.cvut.cz ICQ: 9813416
HomePage: http://web.pinknet.cz/~bubrak/bubrak
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-