Accessing pixel blocks using a raster cursor
Raster pixel access is normally handled block by block and the RasterCursor class is used to loop through the pixel blocks of a whole raster. You can define the size of a pixel block or use a system optimized pixel block size.
See the following code example:
[Java]
static void usingRasterCursorWithPixelBlock(IRasterDataset2 rasterDs)throws
Exception{
//Create a raster.
IRaster2 raster2 = new IRaster2Proxy(rasterDs.createFullRaster());
//Create a raster cursor with a system-optimized pixel block size by passing a null.
IRasterCursor rasterCursor = raster2.createCursorEx(null);
//Use the IRasterEdit interface.
IRasterEdit rasterEdit = new IRasterEditProxy(raster2);
//Loop through each band and pixel block.
IRasterBandCollection bands = new IRasterBandCollectionProxy(rasterDs);
IPixelBlock3 pixelblock3 = null;
long blockwidth = 0;
long blockheight = 0;
Object pixels;
IPnt tlc = null;
long bandCount = bands.getCount();
do{
pixelblock3 = new IPixelBlock3Proxy(rasterCursor.getPixelBlock());
blockwidth = pixelblock3.getWidth();
blockheight = pixelblock3.getHeight();
pixelblock3.mask(255);
for (int k = 0; k < bandCount; k++){
//Get the pixel array.
pixels = pixelblock3.getPixelData(k);
for (long i = 0; i < blockwidth - 1; i++){
for (long j = 0; j < blockheight - 1; j++){
//Get the pixel value from the Object pixels.
}
}
//Set the pixel array to the pixel block.
pixelblock3.setPixelData(k, pixels);
}
//Write back to the raster.
tlc = rasterCursor.getTopLeft();
rasterEdit.write(tlc, new IPixelBlockProxy(pixelblock3));
}
while (rasterCursor.next());
}
Development licensing | Deployment licensing |
---|---|
ArcView | ArcView |
ArcEditor | ArcEditor |
ArcInfo | ArcInfo |
Engine Developer Kit | Engine Runtime |