}
} else if (cm instanceof ComponentColorModel
&& (numComponents == 3 || (enableCMYK && numComponents == 4))
&& !cm.hasAlpha()) {
Raster raster = image.getTile(0, 0);
DataBuffer buffer = raster.getDataBuffer();
SampleModel sampleModel = raster.getSampleModel();
if (sampleModel instanceof PixelInterleavedSampleModel) {
PixelInterleavedSampleModel piSampleModel;
piSampleModel = (PixelInterleavedSampleModel)sampleModel;
int[] offsets = piSampleModel.getBandOffsets();
for (int i = 0; i < offsets.length; i++) {
if (offsets[i] != i && offsets[i] != offsets.length - 1 - i) {
//Don't encode directly as samples are not next to each other
//i.e. offsets are not 012 (RGB) or 0123 (CMYK)
// let also pass 210 BGR and 3210 (KYMC); 3210 will be skipped below
// if 210 (BGR) the B and R bytes will be permuted later in optimizeWriteTo()
return;
}
}
// check if we are in a BGR case; this is added here as a workaround for bug fix
// http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6549882 that causes some PNG
// images to be loaded as BGR with the consequence that performance was being impacted
this.isBGR = false;
if (offsets.length == 3 && offsets[0] == 2 && offsets[1] == 1 && offsets[2] == 0) {
this.isBGR = true;
}
// make sure we did not get here due to a KMYC image
if (offsets.length == 4 && offsets[0] == 3 && offsets[1] == 2 && offsets[2] == 1
&& offsets[3] == 0) {
return;
}
}
if (cm.getTransferType() == DataBuffer.TYPE_BYTE
&& buffer.getOffset() == 0
&& buffer.getNumBanks() == 1) {
this.firstTileDump = true;
this.encodedColorModel = cm;
}
}
}