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);
|
Entry compressionEntry = IFD.getEntryById(TIFF.TAG_COMPRESSION);
|
||||||
Number compression = (Number) compressionEntry.getValue();
|
if(compressionEntry != null) {
|
||||||
if (compression.shortValue() == TIFFExtension.COMPRESSION_OLD_JPEG) {
|
Number compression = (Number) compressionEntry.getValue();
|
||||||
newIFD.remove(compressionEntry);
|
if (compression.shortValue() == TIFFExtension.COMPRESSION_OLD_JPEG) {
|
||||||
newIFD.add(new TIFFEntry(TIFF.TAG_COMPRESSION, TIFF.TYPE_SHORT, TIFFExtension.COMPRESSION_JPEG));
|
newIFD.remove(compressionEntry);
|
||||||
|
newIFD.add(new TIFFEntry(TIFF.TAG_COMPRESSION, TIFF.TYPE_SHORT, TIFFExtension.COMPRESSION_JPEG));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return newIFD;
|
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) {
|
protected URL getClassLoaderResource(final String pName) {
|
||||||
return getClass().getResource(pName);
|
return getClass().getResource(pName);
|
||||||
}
|
}
|
||||||
|
@ -69,6 +69,12 @@ public final class PICTImageReaderSpi extends ImageReaderSpiBase {
|
|||||||
else {
|
else {
|
||||||
// Skip header 512 bytes for file-based streams
|
// Skip header 512 bytes for file-based streams
|
||||||
stream.reset();
|
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);
|
skipNullHeader(stream);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -7,6 +7,7 @@ import java.awt.color.ColorSpace;
|
|||||||
import java.awt.image.ComponentColorModel;
|
import java.awt.image.ComponentColorModel;
|
||||||
import java.awt.image.ComponentSampleModel;
|
import java.awt.image.ComponentSampleModel;
|
||||||
import java.awt.image.SampleModel;
|
import java.awt.image.SampleModel;
|
||||||
|
import java.awt.image.WritableRaster;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ExtraSamplesColorModel.
|
* ExtraSamplesColorModel.
|
||||||
@ -41,4 +42,19 @@ final class ExtraSamplesColorModel extends ComponentColorModel {
|
|||||||
// Must have the same number of components
|
// Must have the same number of components
|
||||||
return numComponents == sm.getNumBands() && transferType == sm.getTransferType();
|
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.*;
|
||||||
import java.awt.image.BufferedImage;
|
import java.awt.image.BufferedImage;
|
||||||
import java.awt.image.Raster;
|
import java.awt.image.Raster;
|
||||||
|
import java.awt.image.WritableRaster;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.nio.ByteOrder;
|
import java.nio.ByteOrder;
|
||||||
import java.util.Arrays;
|
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
|
@Test
|
||||||
public void testReadWithSubsampleParamPixelsJPEG() throws IOException {
|
public void testReadWithSubsampleParamPixelsJPEG() throws IOException {
|
||||||
// Tiled "new style" JPEG
|
// 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