mirror of
https://github.com/haraldk/TwelveMonkeys.git
synced 2025-08-04 20:15:28 -04:00
Merge remote-tracking branch 'origin/master'
This commit is contained in:
commit
8579b1c5bc
@ -477,12 +477,13 @@ public final class TIFFUtilities {
|
||||
}
|
||||
|
||||
Entry compressionEntry = IFD.getEntryById(TIFF.TAG_COMPRESSION);
|
||||
Number compression = (Number) compressionEntry.getValue();
|
||||
if (compression.shortValue() == TIFFExtension.COMPRESSION_OLD_JPEG) {
|
||||
newIFD.remove(compressionEntry);
|
||||
newIFD.add(new TIFFEntry(TIFF.TAG_COMPRESSION, TIFF.TYPE_SHORT, TIFFExtension.COMPRESSION_JPEG));
|
||||
if(compressionEntry != null) {
|
||||
Number compression = (Number) compressionEntry.getValue();
|
||||
if (compression.shortValue() == TIFFExtension.COMPRESSION_OLD_JPEG) {
|
||||
newIFD.remove(compressionEntry);
|
||||
newIFD.add(new TIFFEntry(TIFF.TAG_COMPRESSION, TIFF.TYPE_SHORT, TIFFExtension.COMPRESSION_JPEG));
|
||||
}
|
||||
}
|
||||
|
||||
return newIFD;
|
||||
}
|
||||
|
||||
|
@ -233,6 +233,34 @@ public class TIFFUtilitiesTest {
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testMergeWithSubIFD() throws IOException {
|
||||
String testFile = "/tiff/cmyk_jpeg.tif";
|
||||
|
||||
File output = File.createTempFile("imageiotest", ".tif");
|
||||
ImageOutputStream outputStream = ImageIO.createImageOutputStream(output);
|
||||
InputStream inputStream1 = getClassLoaderResource(testFile).openStream();
|
||||
ImageInputStream imageInput1 = ImageIO.createImageInputStream(inputStream1);
|
||||
InputStream inputStream2 = getClassLoaderResource(testFile).openStream();
|
||||
ImageInputStream imageInput2 = ImageIO.createImageInputStream(inputStream2);
|
||||
ArrayList<TIFFUtilities.TIFFPage> pages = new ArrayList<>();
|
||||
pages.addAll(TIFFUtilities.getPages(imageInput1));
|
||||
pages.addAll(TIFFUtilities.getPages(imageInput2));
|
||||
TIFFUtilities.writePages(outputStream, pages);
|
||||
|
||||
ImageInputStream testOutput = ImageIO.createImageInputStream(output);
|
||||
ImageReader reader = ImageIO.getImageReaders(testOutput).next();
|
||||
reader.setInput(testOutput);
|
||||
int numImages = reader.getNumImages(true);
|
||||
for (int i = 0; i < numImages; i++) {
|
||||
reader.read(i);
|
||||
}
|
||||
|
||||
imageInput1.close();
|
||||
imageInput2.close();
|
||||
outputStream.close();
|
||||
}
|
||||
|
||||
protected URL getClassLoaderResource(final String pName) {
|
||||
return getClass().getResource(pName);
|
||||
}
|
||||
|
@ -69,6 +69,12 @@ public final class PICTImageReaderSpi extends ImageReaderSpiBase {
|
||||
else {
|
||||
// Skip header 512 bytes for file-based streams
|
||||
stream.reset();
|
||||
|
||||
// If we don't mark again here, the reset call in the finally block will:
|
||||
// A) do nothing
|
||||
// B) eat marks created in the stream previously
|
||||
stream.mark();
|
||||
|
||||
skipNullHeader(stream);
|
||||
}
|
||||
|
||||
|
@ -7,6 +7,7 @@ import java.awt.color.ColorSpace;
|
||||
import java.awt.image.ComponentColorModel;
|
||||
import java.awt.image.ComponentSampleModel;
|
||||
import java.awt.image.SampleModel;
|
||||
import java.awt.image.WritableRaster;
|
||||
|
||||
/**
|
||||
* ExtraSamplesColorModel.
|
||||
@ -41,4 +42,19 @@ final class ExtraSamplesColorModel extends ComponentColorModel {
|
||||
// Must have the same number of components
|
||||
return numComponents == sm.getNumBands() && transferType == sm.getTransferType();
|
||||
}
|
||||
|
||||
@Override
|
||||
public WritableRaster getAlphaRaster(WritableRaster raster) {
|
||||
if (hasAlpha() == false) {
|
||||
return null;
|
||||
}
|
||||
|
||||
int x = raster.getMinX();
|
||||
int y = raster.getMinY();
|
||||
int[] band = new int[1];
|
||||
band[0] = super.getNumComponents() - 1;
|
||||
return raster.createWritableChild(x, y, raster.getWidth(),
|
||||
raster.getHeight(), x, y,
|
||||
band);
|
||||
}
|
||||
}
|
||||
|
@ -40,6 +40,7 @@ import javax.imageio.stream.ImageInputStream;
|
||||
import java.awt.*;
|
||||
import java.awt.image.BufferedImage;
|
||||
import java.awt.image.Raster;
|
||||
import java.awt.image.WritableRaster;
|
||||
import java.io.IOException;
|
||||
import java.nio.ByteOrder;
|
||||
import java.util.Arrays;
|
||||
@ -586,6 +587,25 @@ public class TIFFImageReaderTest extends ImageReaderAbstractTest<TIFFImageReader
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testAlphaRasterForMultipleExtraSamples() throws IOException {
|
||||
ImageReader reader = createReader();
|
||||
try (ImageInputStream stream = ImageIO.createImageInputStream(getClassLoaderResource("/tiff/extra-channels.tif"))) {
|
||||
reader.setInput(stream);
|
||||
|
||||
BufferedImage image = reader.read(0);
|
||||
assertNotNull(image);
|
||||
|
||||
assertEquals(0x00, image.getRGB(0, 0));
|
||||
assertEquals(0xf5, (image.getRGB(50, 50) & 0xff000000) >>> 24);
|
||||
|
||||
int[] alpha = new int[1];
|
||||
WritableRaster alphaRaster = image.getAlphaRaster();
|
||||
assertEquals(0x00, alphaRaster.getPixel(0, 0, alpha)[0]);
|
||||
assertEquals(0xf5, alphaRaster.getPixel(50, 50, alpha)[0]);
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testReadWithSubsampleParamPixelsJPEG() throws IOException {
|
||||
// Tiled "new style" JPEG
|
||||
|
BIN
imageio/imageio-tiff/src/test/resources/tiff/extra-channels.tif
Executable file
BIN
imageio/imageio-tiff/src/test/resources/tiff/extra-channels.tif
Executable file
Binary file not shown.
Loading…
x
Reference in New Issue
Block a user