用vc 写了一个生成栅格的程序,可是生成的栅格中,栅格单元值都为0,值并没有赋进去!不知道问题出现在哪,望高手赐教~急急`
//=**********************************************************************************************
//生成栅格图
//=**********************************************************************************************
IWorkspacePtr pSaveWorkspace;
IWorkspaceFactoryPtr pSaveWorkspacefactor(CLSID_RasterWorkspaceFactory);
//设置存放目录
BSTR pSavapath=L"D:\\Data\\New";
pSaveWorkspacefactor->OpenFromFile (pSavapath,NULL,&pSaveWorkspace);
IRasterWorkspace2Ptr pRasterWorkspace2;
IRasterDatasetPtr pSaveRasterds;
pRasterWorkspace2=pSaveWorkspace;
//为新图层命名
BSTR newRasterName=L"newraster.tif";
//新图层格式//TIFF大写注意
BSTR newRasteformat=L"TIFF";
IPointPtr pt;
pt.CreateInstance(CLSID_Point);
pt->PutCoords(0.0,0.0);
//获取原图的投影
ISpatialReferencePtr pSR;
pSR.CreateInstance(__uuidof(UnknownCoordinateSystem));
pRasterWorkspace2->CreateRasterDataset(newRasterName,newRasteformat,
pt,10,10,10,10, 1,
PT_FLOAT,pSR,TRUE,&pSaveRasterds);
IRasterPtr pnewRaster;
pSaveRasterds->CreateDefaultRaster (&pnewRaster);
pSR =NULL;
pt =NULL;
pSaveRasterds = NULL;
//=**********************************************************************************************
//写栅格单元(插值)
//=**********************************************************************************************
int m_index;
//Create a pixel block for the pixels that need to write
IPixelBlockPtr pPixelBlock;
//Size
IPntPtr pSize(CLSID_DblPnt);
pSize->SetCoords(10, 10);
IPntPtr ipPnt(CLSID_DblPnt);
pnewRaster->CreatePixelBlock (pSize,&pPixelBlock);
pSize =NULL;
//给最终写栅格数组初始化
VARIANT V;
::VariantInit (&V);
SAFEARRAY *psa;
SAFEARRAYBOUND rgsabound[2];
rgsabound[0].cElements = 10;
rgsabound[0].lLbound = 0;
rgsabound[1].cElements = 10;
rgsabound[1].lLbound = 0;
psa = SafeArrayCreate(VT_UI4,2,rgsabound);
PINT VARRAY;
SafeArrayAccessData(psa,(void**)&VARRAY);
for(c=0;c<10;c++)
{
for(r=0;r<10;r++)
{
m_index = c*10 + r;
VARRAY[m_index] =100;
}
}
V.vt =VT_ARRAY |VT_UI4;
V.parray =psa;
SafeArrayUnaccessData(psa);
pPixelBlock->put_SafeArray(0,V) ;
IRasterEditPtr pRasterEdit;
pRasterEdit =pnewRaster;
ipPnt->SetCoords(0,0);//这里要这样设置0,0
pRasterEdit->Write( ipPnt, pPixelBlock);
SafeArrayDestroy(psa);
pPixelBlock = NULL;
ipPnt = NULL;
pnewRaster = NULL;
pRasterEdit =NULL;
pRasterWorkspace2 = NULL;
pSaveWorkspacefactor = NULL;
pSaveWorkspace =NULL;
::VariantClear (&V);