使用gdal讀取影象資料,然後用構建gdi+點陣圖顯示
阿新 • • 發佈:2019-02-13
如果想利用雙快取顯示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); } }