mirror of
https://github.com/haraldk/TwelveMonkeys.git
synced 2025-08-04 03:55:28 -04:00
#341 Work-around for OpenJDK JPEG read issue
This commit is contained in:
parent
acf7c5f007
commit
2eecdbb216
@ -379,6 +379,7 @@ public final class JPEGImageReader extends ImageReaderBase {
|
||||
sourceCSType == JPEGColorSpace.CMYK ||
|
||||
sourceCSType == JPEGColorSpace.YCCK ||
|
||||
profile != null && !ColorSpaces.isCS_sRGB(profile) ||
|
||||
!delegate.getImageTypes(imageIndex).hasNext() ||
|
||||
sourceCSType == JPEGColorSpace.YCbCr && getRawImageType(imageIndex) != null)) { // TODO: Issue warning?
|
||||
if (DEBUG) {
|
||||
System.out.println("Reading using raster and extra conversion");
|
||||
@ -499,8 +500,11 @@ public final class JPEGImageReader extends ImageReaderBase {
|
||||
Raster raster = delegate.readRaster(imageIndex, param); // non-converted
|
||||
|
||||
// Apply source color conversion from implicit color space
|
||||
if (csType == JPEGColorSpace.YCbCr || csType == JPEGColorSpace.YCbCrA) {
|
||||
convertYCbCr2RGB(raster);
|
||||
if (csType == JPEGColorSpace.YCbCr) {
|
||||
convertYCbCr2RGB(raster, 3);
|
||||
}
|
||||
else if (csType == JPEGColorSpace.YCbCrA) {
|
||||
convertYCbCr2RGB(raster, 4);
|
||||
}
|
||||
else if (csType == JPEGColorSpace.YCCK) {
|
||||
// TODO: Need to rethink this (non-) inversion, see #147
|
||||
@ -1124,7 +1128,7 @@ public final class JPEGImageReader extends ImageReaderBase {
|
||||
super.processWarningOccurred(warning);
|
||||
}
|
||||
|
||||
static void invertCMYK(final Raster raster) {
|
||||
private static void invertCMYK(final Raster raster) {
|
||||
byte[] data = ((DataBufferByte) raster.getDataBuffer()).getData();
|
||||
|
||||
for (int i = 0, dataLength = data.length; i < dataLength; i++) {
|
||||
@ -1132,19 +1136,19 @@ public final class JPEGImageReader extends ImageReaderBase {
|
||||
}
|
||||
}
|
||||
|
||||
public static void convertYCbCr2RGB(final Raster raster) {
|
||||
private static void convertYCbCr2RGB(final Raster raster, final int numComponents) {
|
||||
final int height = raster.getHeight();
|
||||
final int width = raster.getWidth();
|
||||
final byte[] data = ((DataBufferByte) raster.getDataBuffer()).getData();
|
||||
|
||||
for (int y = 0; y < height; y++) {
|
||||
for (int x = 0; x < width; x++) {
|
||||
YCbCrConverter.convertYCbCr2RGB(data, data, (x + y * width) * 3);
|
||||
YCbCrConverter.convertYCbCr2RGB(data, data, (x + y * width) * numComponents);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static void convertYCCK2CMYK(final Raster raster) {
|
||||
private static void convertYCCK2CMYK(final Raster raster) {
|
||||
final int height = raster.getHeight();
|
||||
final int width = raster.getWidth();
|
||||
final byte[] data = ((DataBufferByte) raster.getDataBuffer()).getData();
|
||||
@ -1293,10 +1297,10 @@ public final class JPEGImageReader extends ImageReaderBase {
|
||||
|
||||
try {
|
||||
if (region.length >= 4) {
|
||||
roi = new Rectangle(Integer.parseInt(region[0]), Integer.parseInt(region[2]), Integer.parseInt(region[2]), Integer.parseInt(region[3]));
|
||||
roi = new Rectangle(Integer.parseInt(region[0]), Integer.parseInt(region[1]), Integer.parseInt(region[2]), Integer.parseInt(region[3]));
|
||||
}
|
||||
else {
|
||||
roi = new Rectangle(Integer.parseInt(region[0]), Integer.parseInt(region[2]));
|
||||
roi = new Rectangle(Integer.parseInt(region[0]), Integer.parseInt(region[1]));
|
||||
}
|
||||
}
|
||||
catch (IndexOutOfBoundsException | NumberFormatException e) {
|
||||
@ -1389,7 +1393,8 @@ public final class JPEGImageReader extends ImageReaderBase {
|
||||
param.setSourceSubsampling(subX, subY, xOff, yOff);
|
||||
param.setSourceRegion(roi);
|
||||
|
||||
image = reader.getImageTypes(0).next().createBufferedImage((reader.getWidth(0) + subX - 1)/ subX, (reader.getHeight(0) + subY - 1) / subY);
|
||||
// image = reader.getImageTypes(0).next().createBufferedImage((reader.getWidth(0) + subX - 1)/ subX, (reader.getHeight(0) + subY - 1) / subY);
|
||||
image = null;
|
||||
}
|
||||
else {
|
||||
// image = reader.getImageTypes(0).next().createBufferedImage(reader.getWidth(0), reader.getHeight(0));
|
||||
|
Loading…
x
Reference in New Issue
Block a user