高分求教~急急!VC+AO栅格的问题

csuftliang 2008-10-15 10:42:20
用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);
...全文
82 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
csuftliang 2008-10-17
  • 打赏
  • 举报
回复
研究把结贴~老师的给我宝贵的知识~感慨中
想一起交流的qq26935562!
csuftliang 2008-10-16
  • 打赏
  • 举报
回复
在使用前已经给赋值了m_index = c*10 + r;~~估计这里没问题
VsirSoft 2008-10-16
  • 打赏
  • 举报
回复
楼主

上面的int m_index; 和


for(c=0;c <10;c++)
{
for(r=0;r <10;r++)
{
m_index = c*10 + r;
VARRAY[m_index] =100;
}
}

m_index还没有初值吧 还是你其他地方处理的 用断点调试看看m_index的值
csuftliang 2008-10-16
  • 打赏
  • 举报
回复
无人问津吗??
csuftliang 2008-10-15
  • 打赏
  • 举报
回复
我的QQ26935562
csuftliang 2008-10-15
  • 打赏
  • 举报
回复
我的QQ26935562

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧