1. 程式人生 > >使用gdal讀取影象資料,然後用構建gdi+點陣圖顯示

使用gdal讀取影象資料,然後用構建gdi+點陣圖顯示

如果想利用雙快取顯示gdal讀取的影象資料,把影象資料構建成一個gdi+的點陣圖來顯示
void CGdalGdiView::OnDraw(CDC* /*pDC*/)
{
	CGdalGdiDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);
	if (!pDoc)
		return;
	// TODO: 在此處為本機資料新增繪製程式碼
	if(m_lable)
	{  GDALAllRegister(); 
	m_pDataset =(GDALDataset*) GDALOpen("C:\\tiff\\111.tif",GA_ReadOnly );
         if(m_pDataset==NULL )  
           {  
           AfxMessageBox(_T("檔案開啟失敗!!!"));  
           return;  
           }   
          CRect rect;
          GetClientRect(rect);
	  int dataWidth=m_pDataset->GetRasterXSize();
	  int dataHeight=m_pDataset->GetRasterYSize();
          int dataBands =  m_pDataset->GetRasterCount();  
          int band_list[3] = {3,2,1};  	
          int iSize = GDALGetDataTypeSize(GDT_Byte) / 8; 
          BYTE* pBuffer = new BYTE[dataWidth*dataHeight*dataBands];  
          CPLErr err = m_pDataset->RasterIO(GF_Read, 0, 0, dataWidth, dataHeight, pBuffer, dataWidth, dataHeight,  GDT_Byte, band_list, 3,dataWidth*3, 1); 
                           
            
          CDC* pDC=GetDC();
          m_pBitmap=::new Bitmap(dataWidth, dataHeight, dataWidth*dataBands,         
          PixelFormat24bppRGB, (BYTE*)pBuffer); 
          Gdiplus::Graphics graphics(pDC->GetSafeHdc());
	  graphics.DrawImage(m_pBitmap, 0, 0,rect.Width(),rect.Height());
	  ReleaseDC(pDC);
	}
}