[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