阅读:1157回复:0
[原创]新建栅格的代码,,VC++,请有空帮我看看?
我这两天在写新建栅格的代码,到现在也没有调通,栅格是生成了,但栅格的值给不了,我试过IPixelblock->getsafearry(),然后再IPixelblock->put_safearry()回去,不行。
<DIV>也试过了从IPixelblock3->get_PixelDataByRef(0,;pval);得到变量,然后去pval给值 ,好象也不行, 不知道为什么?</DIV> <DIV>我能参考一下您的代码么?下面是写的代码,请指教:</DIV> <DIV> </DIV> <DIV> </DIV> <DIV>CString szAppName("D:<A rel=nofollow><FONT color=#014982>\\raster</FONT></A>");<BR> IWorkspaceFactoryPtr ipWsFact(CLSID_RasterWorkspaceFactory);<BR> IWorkspacePtr ipWorkspace;<BR> ipWsFact->OpenFromFile(szAppName.AllocSysString(), 0, ;ipWorkspace);<BR> <BR> srand(unsigned(time(NULL)));<BR> CString szFileName;<BR> int num = rand();<BR> szFileName.Format("Raster_%d", num);<BR><BR><BR> IPointPtr ipPoint(CLSID_Point);<BR> ipPoint->PutCoords(0,0);<BR> IRasterWorkspace2Ptr ipRasterWorkspace(ipWorkspace);<BR> IRasterDatasetPtr ipRasterDataset;<BR> ipRasterWorkspace->CreateRasterDataset(szFileName.AllocSysString(),<BR> _bstr_t("IMAGINE Image"),<BR> ipPoint,100,100,1,1,1,PT_DOUBLE,NULL,VARIANT_TRUE, ;ipRasterDataset);<BR> IRasterBandCollectionPtr ipRasterBandCollection(ipRasterDataset);<BR> IRasterBandPtr ipRasterBand;<BR> ipRasterBandCollection->Item(0, ;ipRasterBand);<BR> IRawPixelsPtr ipRaswPixels(ipRasterBand);<BR> IPixelBlockPtr ipPixelBlock;<BR> IRasterPropsPtr ipRasterProps(ipRaswPixels);<BR> <BR> IPntPtr ipPnt(CLSID_DblPnt);<BR> ipPnt->SetCoords(0,0);<BR> IPntPtr ipSize(CLSID_DblPnt);<BR> long dblWidth,dblHeight;<BR> ipRasterProps->get_Width(;dblWidth);<BR> ipRasterProps->get_Height(;dblHeight);<BR> <BR> ipSize->SetCoords(dblWidth,dblHeight);<BR> ipRaswPixels->CreatePixelBlock(ipSize, ;ipPixelBlock);<BR> ipRaswPixels->Read(ipPnt, ipPixelBlock);<BR> <BR> VARIANT var;</DIV> <DIV>Var.vt = VT_ARRAY |VT_R8<BR>IPixelBlock3Ptr ipPixelBlock(ipPixelBlock);<BR> ipPixelBlock->get_PixelDataByRef(0, ;var);<BR> // ipPixelData <BR> long size = dblWidth*dblHeight;<BR> for(long k =0; k< size; k++)<BR> {<BR> SafeArrayPutElement(var.parray, ;k, (void*);k) ;<BR> }<BR> IUnknownPtr ipUnknown;<BR> ipRaswPixels->AcquireCache(;ipUnknown);<BR> ipRaswPixels->Write(ipPnt, ipPixelBlock);<BR> long num_refs;<BR> ipRaswPixels->ReturnCache(ipUnknown, ;num_refs);</DIV> |
|