[gdal-dev] Re: Problem w\images with one raster band
Ari Jolma
ari.jolma at gmail.com
Wed Jan 11 06:45:31 EST 2012
oops, I seem to have asked off-list from Timur an example file.
Timur, the file you sent me has a color table, which you need to use for
RGB lookup - the value in the raster is an index to the color LUT.
Best regards,
Ari
On 01/11/2012 12:08 PM, AksakTimur wrote:
> http://osgeo-org.1803224.n2.nabble.com/file/n7175677/Image.cpp Image.cpp
>
>
> Ari,
>
>
> void CViewMain::OnDraw()
> {
> ....
> if (m_image.IsOpen())
> {
>
> m_image.Draw(hdcMem,m_image.m_XOff,m_image.m_YOff,m_image.m_imgWidth,m_image.m_imgHeight,
> m_image.m_xSrc,m_image.m_ySrc,m_image.m_srcWidth,m_image.m_srcHeight,
> 1,1,1);
> }
> ....
> }
> void CViewMain::OnGdalOpen()
> {
>
> LPCTSTR szFilter = _T("Windows bitmap(*.bmp)|*.bmp|All Files
> (*.*)|*.*||");
> CString filePath(_T(""));
> CFileDialog fileOpenDlg(TRUE, _T("bmp"), NULL,OFN_HIDEREADONLY,szFilter);
> if (fileOpenDlg.DoModal() == IDOK)
> {
> VERIFY(filePath = fileOpenDlg.GetPathName());
> }
>
> const char* pszFilename = CStringToCharUTF8(filePath);
>
>
> m_image.Open(filePath);
>
> }
>
> void CGDALImage::Draw(CDC *pDC, long xOff, long yOff, long width, long
> height, long xSrc, long ySrc, long srcWidth, long srcHeight, long rband,
> long gband, long bband)
> {
>
> if(pDC==NULL)
> return;
> if (!m_pDataset)
> return;
>
> if(m_DC.m_hDC>0)
> m_DC.Detach();
> m_DC.Attach(pDC->m_hDC);
> m_hdc=pDC->m_hDC;
>
> if (rband == 0 || rband>m_bandNum)
> rband = m_CurrentBand;
> if (gband == 0 || gband>m_bandNum)
> gband = m_CurrentBand;
> if (bband == 0 || bband>m_bandNum)
> bband = m_CurrentBand;
>
> m_red=rband;
> m_green=gband;
> m_blue=bband;
>
> if(xSrc<0 ||xSrc>m_imgWidth) xSrc=0;
> if(ySrc<0 ||ySrc>m_imgHeight) ySrc=0;
> if(srcWidth<1 || srcWidth> m_imgWidth) srcWidth=m_imgWidth;
> if(srcHeight<1 || srcHeight> m_imgHeight) srcHeight=m_imgHeight;
> m_XOff=xSrc;//¶БИлµЅДЪґжµДУ°ПсЖрКјО»ЦГ
> m_YOff=ySrc;
> m_buffWidth=srcWidth;//»єґжµДёЯ¶ИЈ¬їн¶И
> m_buffHeight=srcHeight;
> if(double(width)/
> double(height)>double(srcWidth)/double(srcHeight))//±ЈЦ¤і¤їнІ»»ы±д
> {
> double tmp=height*double(srcWidth)/double(srcHeight);
> width=tmp-long(tmp)>0.5?long(tmp)+1:long(tmp);
> }
> else
> {
> double tmp=width*double(srcHeight)/double(srcWidth);
> height=tmp-long(tmp)>0.5?long(tmp)+1:long(tmp);
> }
>
> m_WndWidth=width;
> m_WnDHeight=height;
> m_WndXOff=xOff;
> m_WndYOff=yOff;
> m_xSrc=xSrc;
> m_ySrc=ySrc;
> m_srcWidth=srcWidth;
> m_srcHeight= srcHeight;
>
> //byte* buf = new byte[srcWidth*srcHeight];
> int dataType=0;
> if(m_DataType=="Byte")dataType=0;
> if(m_DataType=="UInt16")dataType=1;
> if(m_DataType=="Int16")dataType=2;
> if(m_DataType=="UInt32")dataType=3;
> if(m_DataType=="Int32")dataType=4;
> if(m_DataType=="Float32")dataType=5;
> if(m_DataType=="Float64")dataType=6;
> if(m_DataType=="CInt16")dataType=7;
> if(m_DataType=="CInt32")dataType=8;
> if(m_DataType=="CFloat32")dataType=9;
> if(m_DataType=="CFloat64")dataType=10;
>
> GDALRasterBand *m_pBand=NULL;
> byte* m_ByteBuff;
> float* m_FloatBuff;
> byte* buf =NULL;
> float* buffFloat=NULL;
> int x,y;
> CDC dcMem;
> dcMem.CreateCompatibleDC(pDC);
> CBitmap bitmap;
> bitmap.CreateCompatibleBitmap(pDC,width,height);
> dcMem.SelectObject(&bitmap);
> int i;
> switch(dataType)
> {
> case 0://byteѕНbyte
>
> m_ByteBuff = new byte[width*height*3];
> m_buffHeight=height;
> m_buffWidth=width;
> m_buffSize=height*width*3;
> buf = new byte[width*height];
>
> m_pBand = m_pDataset->GetRasterBand(rband);
> if (m_pBand)
> {
> if (CE_None==m_pBand->RasterIO( GF_Read, xSrc,ySrc,
> srcWidth, srcHeight, buf, width,height, GDT_Byte, 0, 0 ))
> {
> for ( i = 0; i< width*height; i ++)
> m_ByteBuff[3*i+2] = buf[i];
> }
> }
> m_pBand = m_pDataset->GetRasterBand(gband);
> if (m_pBand)
> {
> if (CE_None==m_pBand->RasterIO( GF_Read, xSrc,ySrc,
> srcWidth, srcHeight, buf, width,height, GDT_Byte, 0, 0 ))
> {
> for ( i = 0; i<width*height; i ++)
> m_ByteBuff[3*i+1] = buf[i];
> }
> }
>
> m_pBand = m_pDataset->GetRasterBand(bband);
> if (m_pBand)
> {
> if (CE_None==m_pBand->RasterIO( GF_Read, xSrc,ySrc,
> srcWidth, srcHeight, buf, width,height, GDT_Byte, 0, 0 ))
> {
> for ( i = 0; i< width*height; i ++)
> m_ByteBuff[3*i+0] = buf[i];
> }
> }
> for ( x = 0; x< width; x ++)
> {
> for ( y = 0; y< height; y ++)
> {
>
> dcMem.SetPixel(x,y,RGB(m_ByteBuff[(y*width+x)*3+2],m_ByteBuff[(y*width+x)*3+1],m_ByteBuff[(y*width+x)*3+0]));
> }
> }
> pDC->BitBlt(xOff,yOff,width,height,&dcMem,0,0,SRCCOPY);
> delete buf;
> delete m_ByteBuff;
> m_ByteBuff=NULL;
> buf=NULL;
> break;
> default://ЖдЛыАаРНµД¶јУГfloat
>
>
> m_FloatBuff = new float[width*height*3];
> m_buffHeight=height;
> m_buffWidth=width;
>
> m_buffSize=height*width*3;
> buffFloat = new float[width*height];
>
> m_pBand = m_pDataset->GetRasterBand(rband);
> if (m_pBand)
> {
> if (CE_None==m_pBand->RasterIO( GF_Read, xSrc,ySrc,
> srcWidth, srcHeight, buffFloat, width,height, GDT_Float32, 0, 0 ))
> {
> for ( i = 0; i<width*height; i ++)
> m_FloatBuff[3*i+2] = buffFloat[i];
> }
> }
> m_pBand = m_pDataset->GetRasterBand(gband);
> if (m_pBand)
> {
> if (CE_None==m_pBand->RasterIO( GF_Read, xSrc,ySrc,
> srcWidth, srcHeight, buffFloat, width,height, GDT_Float32, 0, 0 ))
> {
> for ( i = 0; i<width*height; i ++)
> m_FloatBuff[3*i+1] = buffFloat[i];
> }
> }
>
> m_pBand = m_pDataset->GetRasterBand(bband);
> if (m_pBand)
> {
> if (CE_None==m_pBand->RasterIO( GF_Read, xSrc,ySrc,
> srcWidth, srcHeight, buffFloat, width,height, GDT_Float32, 0, 0 ))
> {
> for ( i = 0; i< width*height; i ++)
> m_FloatBuff[3*i+0] = buffFloat[i];
> }
> }
> for ( x = 0; x< width; x ++)
> {
> for ( y = 0; y< height; y ++)
> {
>
> dcMem.SetPixel(x,y,RGB(m_FloatBuff[(y*width+x)*3+2],m_FloatBuff[(y*width+x)*3+1],m_FloatBuff[(y*width+x)*3+0]));
> }
> }
> pDC->BitBlt(xOff,yOff,width,height,&dcMem,0,0,SRCCOPY);
> delete buffFloat;
> delete m_FloatBuff;
> m_FloatBuff=NULL;
> buffFloat=NULL;
> break;
> }
>
>
> }
>
>
> For imagesc with bands>= 3 the OnDraw function works fine:
> m_image.Draw(hdcMem,m_image.m_XOff,m_image.m_YOff,m_image.m_imgWidth,m_image.m_imgHeight,
> m_image.m_xSrc,m_image.m_ySrc,m_image.m_srcWidth,m_image.m_srcHeight,
> 1,2,3);
>
> Best Regards
>
> --
> View this message in context: http://osgeo-org.1803224.n2.nabble.com/gdal-dev-Problem-w-images-with-one-raster-band-tp7175398p7175677.html
> Sent from the GDAL - Dev mailing list archive at Nabble.com.
> _______________________________________________
> gdal-dev mailing list
> gdal-dev at lists.osgeo.org
> http://lists.osgeo.org/mailman/listinfo/gdal-dev
More information about the gdal-dev
mailing list