下面列出了java.awt.image.DataBufferInt#getElem() 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
private static byte[] extractComponentRGBInt( int aWidth, int aHeight, ComponentSampleModel aSampleModel, DataBufferInt aDataBuffer ) {
byte[] out = new byte[ aWidth * aHeight * 3 ];
int[] bankIndices = aSampleModel.getBankIndices();
int[] bankOffsets = aSampleModel.getBandOffsets();
int rScanIx = bankOffsets[ 0 ];
int gScanIx = bankOffsets[ 1 ];
int bScanIx = bankOffsets[ 2 ];
int pixelStride = aSampleModel.getPixelStride();
int scanlineStride = aSampleModel.getScanlineStride();
for ( int b = 0, y = 0; y < aHeight; y++ ) {
int rPixIx = rScanIx;
int gPixIx = gScanIx;
int bPixIx = bScanIx;
for ( int x = 0; x < aWidth; x++, b += 3 ) {
out[b] = (byte) aDataBuffer.getElem(bankIndices[0], rPixIx);
rPixIx += pixelStride;
out[b + 1] = (byte) aDataBuffer.getElem(bankIndices[1], gPixIx);
gPixIx += pixelStride;
out[b + 2] = (byte) aDataBuffer.getElem(bankIndices[2], bPixIx);
bPixIx += pixelStride;
}
rScanIx += scanlineStride;
gScanIx += scanlineStride;
bScanIx += scanlineStride;
}
return out;
}
private static byte[] extractComponentRGBAInt( int aWidth, int aHeight, ComponentSampleModel aSampleModel, DataBufferInt aDataBuffer ) {
byte[] out = new byte[ aWidth * aHeight * 4 ];
int[] bankIndices = aSampleModel.getBankIndices();
int[] bankOffsets = aSampleModel.getBandOffsets();
int rScanIx = bankOffsets[ 0 ];
int gScanIx = bankOffsets[ 1 ];
int bScanIx = bankOffsets[ 2 ];
int aScanIx = bankOffsets[ 3 ];
int pixelStride = aSampleModel.getPixelStride();
int scanlineStride = aSampleModel.getScanlineStride();
for ( int b = 0, y = 0; y < aHeight; y++ ) {
int rPixIx = rScanIx;
int gPixIx = gScanIx;
int bPixIx = bScanIx;
int aPixIx = aScanIx;
for ( int x = 0; x < aWidth; x++, b += 4 ) {
out[b] = (byte) aDataBuffer.getElem(bankIndices[0], rPixIx);
rPixIx += pixelStride;
out[b + 1] = (byte) aDataBuffer.getElem(bankIndices[1], gPixIx);
gPixIx += pixelStride;
out[b + 2] = (byte) aDataBuffer.getElem(bankIndices[2], bPixIx);
bPixIx += pixelStride;
out[b + 3] = (byte) aDataBuffer.getElem(bankIndices[3], aPixIx);
aPixIx += pixelStride;
}
rScanIx += scanlineStride;
gScanIx += scanlineStride;
bScanIx += scanlineStride;
aScanIx += scanlineStride;
}
return out;
}