Ok, here's some more. I get a blank variant array from a pixelblock object (ArcGIS API) and want to populate it using values from another pixelblock.
Code:
VARIANT vOutPixelArray;
ipOutputBlock3->put_PixelType(0, outPixelType);
// Get the SafeArray associated with the first band of output
ipOutputBlock3->get_PixelData(0, &vOutPixelArray);
SAFEARRAY *pData = (vOutPixelArray.parray);
VARIANT v, vOut, vInNodatavalue, vOutNodatavalue;
long HUGEP *pDbl;
// QI RasterProps for output for NoData handling
IRasterPropsPtr ipOutputRasProps;
ipOutputRasProps = ipOutBand;
//Loop through the SafeArray and calculate each pixel value according to the neighborhood-notation
long A, i, j;
long ij[2];
double getvalM;
double dVal;
ipInRasProps->get_NoDataValue(&vInNodatavalue);
ipOutputRasProps->get_NoDataValue(&vOutNodatavalue);
//parses nodata variant
double dInNodatavalue = VDouble(vInNodatavalue, iPT);
hr = SafeArrayAccessData(pData, (void HUGEP* FAR*)&pDbl);
for (i=0; i<(lHeight - 1); i++)
{
ij[0]=i;
for (j=0; j<(lWidth - 1); j++)
{
ij[1]=j;
ipInputBlock3->GetVal(0, i, j, &v);
//extracts value from variant, discriminating between types
dVal = VDouble(v, iPT);
if (dVal == dInNodatavalue)
{
hr = SafeArrayPutElement(vOutPixelArray.parray, ij, &vOutNodatavalue);
//pDbl[i*j] = dVal;
}
else
if ((j + 1) < (lWidth))
{
//getvalS = ipInputBlock->GetVal(0, i, j, &v);
dVal = dVal + 10;
//vOut.vt = VT_I4
vOut.vt = VT_I4;
vOut.lVal = dVal;
//getvalM = vOut.lVal;
long lVal = dVal;
pDbl[i*j] = lVal;
// hr = SafeArrayPutElement(vOutPixelArray.parray, ij, &vOut);
}
}
}
hr = SafeArrayUnaccessData(pData);