mirror of
https://github.com/haraldk/TwelveMonkeys.git
synced 2025-08-04 03:55:28 -04:00
TMI-39: Cleanup after merge.
This commit is contained in:
parent
d607450ae4
commit
e3bab84e82
@ -438,20 +438,21 @@ public class JPEGImageReader extends ImageReaderBase {
|
|||||||
// Unfortunately looping is slower than reading all at once, but
|
// Unfortunately looping is slower than reading all at once, but
|
||||||
// that requires 2 x memory or more, so a few steps is an ok compromise I guess
|
// that requires 2 x memory or more, so a few steps is an ok compromise I guess
|
||||||
try {
|
try {
|
||||||
final int step = Math.max(1024, srcRegion.height / 10); // * param.getSourceYSubsampling(); // TODO: Using a multiple of 8 is probably a good idea for JPEG
|
final int step = Math.max(1024, srcRegion.height / 10); // TODO: Using a multiple of 8 is probably a good idea for JPEG
|
||||||
final int srcMaxY = srcRegion.y + srcRegion.height;
|
final int srcMaxY = srcRegion.y + srcRegion.height;
|
||||||
int destY = dstRegion.y;
|
int destY = dstRegion.y;
|
||||||
|
|
||||||
for (int y = srcRegion.y; y < srcMaxY; y += step) {
|
for (int y = srcRegion.y; y < srcMaxY; y += step) {
|
||||||
int scan = Math.min(step, srcMaxY - y);
|
int scan = Math.min(step, srcMaxY - y);
|
||||||
|
|
||||||
if(scan <= param.getSubsamplingYOffset()) {
|
|
||||||
param.setSourceSubsampling(param.getSourceXSubsampling(),param.getSourceYSubsampling(),param.getSubsamplingXOffset(),0);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Let the progress delegator handle progress, using corrected range
|
// Let the progress delegator handle progress, using corrected range
|
||||||
progressDelegator.updateProgressRange(100f * (y + scan) / srcRegion.height);
|
progressDelegator.updateProgressRange(100f * (y + scan) / srcRegion.height);
|
||||||
|
|
||||||
|
// Make sure subsampling is within bounds
|
||||||
|
if (scan <= param.getSubsamplingYOffset()) {
|
||||||
|
param.setSourceSubsampling(param.getSourceXSubsampling(), param.getSourceYSubsampling(), param.getSubsamplingXOffset(), scan - 1);
|
||||||
|
}
|
||||||
|
|
||||||
Rectangle subRegion = new Rectangle(srcRegion.x, y, srcRegion.width, scan);
|
Rectangle subRegion = new Rectangle(srcRegion.x, y, srcRegion.width, scan);
|
||||||
param.setSourceRegion(subRegion);
|
param.setSourceRegion(subRegion);
|
||||||
Raster raster = delegate.readRaster(imageIndex, param); // non-converted
|
Raster raster = delegate.readRaster(imageIndex, param); // non-converted
|
||||||
|
@ -30,6 +30,7 @@ package com.twelvemonkeys.imageio.plugins.jpeg;
|
|||||||
|
|
||||||
import com.twelvemonkeys.imageio.util.ImageReaderAbstractTestCase;
|
import com.twelvemonkeys.imageio.util.ImageReaderAbstractTestCase;
|
||||||
import org.hamcrest.core.IsInstanceOf;
|
import org.hamcrest.core.IsInstanceOf;
|
||||||
|
import org.junit.Ignore;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import org.mockito.internal.matchers.GreaterThan;
|
import org.mockito.internal.matchers.GreaterThan;
|
||||||
import org.w3c.dom.Element;
|
import org.w3c.dom.Element;
|
||||||
@ -685,6 +686,122 @@ public class JPEGImageReaderTest extends ImageReaderAbstractTestCase<JPEGImageRe
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Regression: Test subsampling offset within of bounds
|
||||||
|
// NOTE: These tests assumes the reader will read at least 1024 scanlines (if available) each iteration,
|
||||||
|
// this might change in the future. If so, the tests will no longer test what tey are supposed to....
|
||||||
|
@Test
|
||||||
|
public void testReadSubsamplingBounds1028() throws IOException {
|
||||||
|
JPEGImageReader reader = createReader();
|
||||||
|
reader.setInput(ImageIO.createImageInputStream(getClassLoaderResource("/jpeg/read-error1028.jpg")));
|
||||||
|
|
||||||
|
ImageReadParam param = reader.getDefaultReadParam();
|
||||||
|
param.setSourceSubsampling(3, 3, 1, 1);
|
||||||
|
|
||||||
|
BufferedImage image = reader.read(0, param);
|
||||||
|
|
||||||
|
assertNotNull(image);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Ignore
|
||||||
|
@Test
|
||||||
|
public void testReadSubsamplingNotSkippingLines1028() throws IOException {
|
||||||
|
JPEGImageReader reader = createReader();
|
||||||
|
reader.setInput(ImageIO.createImageInputStream(getClassLoaderResource("/jpeg/read-error1028.jpg")));
|
||||||
|
|
||||||
|
ImageReadParam param = reader.getDefaultReadParam();
|
||||||
|
param.setSourceSubsampling(3, 3, 1, 1);
|
||||||
|
|
||||||
|
BufferedImage image = reader.read(0, param);
|
||||||
|
|
||||||
|
assertNotNull(image);
|
||||||
|
|
||||||
|
// Make sure correct color is actually read, not just left empty
|
||||||
|
assertEquals(0xfefefd, image.getRGB(0, image.getHeight() - 2) & 0xffffff);
|
||||||
|
assertEquals(0xfefefd, image.getRGB(0, image.getHeight() - 1) & 0xffffff);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testReadSubsamplingBounds1027() throws IOException {
|
||||||
|
JPEGImageReader reader = createReader();
|
||||||
|
reader.setInput(ImageIO.createImageInputStream(getClassLoaderResource("/jpeg/read-error1027.jpg")));
|
||||||
|
|
||||||
|
ImageReadParam param = reader.getDefaultReadParam();
|
||||||
|
param.setSourceSubsampling(3, 3, 2, 2);
|
||||||
|
|
||||||
|
BufferedImage image = reader.read(0, param);
|
||||||
|
|
||||||
|
assertNotNull(image);
|
||||||
|
|
||||||
|
// Make sure correct color is actually read, not just left empty
|
||||||
|
assertEquals(0xfefefd, image.getRGB(0, image.getHeight() - 2) & 0xffffff);
|
||||||
|
assertEquals(0xfefefd, image.getRGB(0, image.getHeight() - 1) & 0xffffff);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testReadSubsamplingBounds1026() throws IOException {
|
||||||
|
JPEGImageReader reader = createReader();
|
||||||
|
reader.setInput(ImageIO.createImageInputStream(getClassLoaderResource("/jpeg/read-error1026.jpg")));
|
||||||
|
|
||||||
|
ImageReadParam param = reader.getDefaultReadParam();
|
||||||
|
param.setSourceSubsampling(3, 3, 1, 1);
|
||||||
|
|
||||||
|
BufferedImage image = reader.read(0, param);
|
||||||
|
|
||||||
|
assertNotNull(image);
|
||||||
|
|
||||||
|
// Make sure correct color is actually read, not just left empty
|
||||||
|
assertEquals(0xfefefd, image.getRGB(0, image.getHeight() - 2) & 0xffffff);
|
||||||
|
assertEquals(0xfefefd, image.getRGB(0, image.getHeight() - 1) & 0xffffff);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testReadSubsamplingBounds1025() throws IOException {
|
||||||
|
JPEGImageReader reader = createReader();
|
||||||
|
reader.setInput(ImageIO.createImageInputStream(getClassLoaderResource("/jpeg/read-error1025.jpg")));
|
||||||
|
|
||||||
|
ImageReadParam param = reader.getDefaultReadParam();
|
||||||
|
param.setSourceSubsampling(3, 3, 1, 1);
|
||||||
|
|
||||||
|
BufferedImage image = reader.read(0, param);
|
||||||
|
|
||||||
|
assertNotNull(image);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Ignore
|
||||||
|
@Test
|
||||||
|
public void testReadSubsamplingNotSkippingLines1025() throws IOException {
|
||||||
|
JPEGImageReader reader = createReader();
|
||||||
|
reader.setInput(ImageIO.createImageInputStream(getClassLoaderResource("/jpeg/read-error1025.jpg")));
|
||||||
|
|
||||||
|
ImageReadParam param = reader.getDefaultReadParam();
|
||||||
|
param.setSourceSubsampling(3, 3, 1, 1);
|
||||||
|
|
||||||
|
BufferedImage image = reader.read(0, param);
|
||||||
|
|
||||||
|
assertNotNull(image);
|
||||||
|
|
||||||
|
// Make sure correct color is actually read, not just left empty
|
||||||
|
assertEquals(0xfefefd, image.getRGB(0, image.getHeight() - 2) & 0xffffff);
|
||||||
|
assertEquals(0xfefefd, image.getRGB(0, image.getHeight() - 1) & 0xffffff);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testReadSubsamplingBounds1024() throws IOException {
|
||||||
|
JPEGImageReader reader = createReader();
|
||||||
|
reader.setInput(ImageIO.createImageInputStream(getClassLoaderResource("/jpeg/read-error1024.jpg")));
|
||||||
|
|
||||||
|
ImageReadParam param = reader.getDefaultReadParam();
|
||||||
|
param.setSourceSubsampling(3, 3, 1, 1);
|
||||||
|
|
||||||
|
BufferedImage image = reader.read(0, param);
|
||||||
|
|
||||||
|
assertNotNull(image);
|
||||||
|
|
||||||
|
// Make sure correct color is actually read, not just left empty
|
||||||
|
assertEquals(0xfefefd, image.getRGB(0, image.getHeight() - 2) & 0xffffff);
|
||||||
|
assertEquals(0xfefefd, image.getRGB(0, image.getHeight() - 1) & 0xffffff);
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testXDensityOutOfRangeIssue() throws IOException {
|
public void testXDensityOutOfRangeIssue() throws IOException {
|
||||||
// Image has JFIF with x/y density 0
|
// Image has JFIF with x/y density 0
|
||||||
@ -988,54 +1105,4 @@ public class JPEGImageReaderTest extends ImageReaderAbstractTestCase<JPEGImageRe
|
|||||||
|
|
||||||
return sortedNodes;
|
return sortedNodes;
|
||||||
}
|
}
|
||||||
@Test
|
|
||||||
public void testReadImage1028() throws IOException {
|
|
||||||
JPEGImageReader reader = createReader();
|
|
||||||
reader.setInput(ImageIO.createImageInputStream(getClassLoaderResource("/jpeg/read-error1028.jpg")));
|
|
||||||
|
|
||||||
ImageReadParam param = reader.getDefaultReadParam();
|
|
||||||
param.setSourceSubsampling(3, 3, 1, 1);
|
|
||||||
BufferedImage image = reader.read(0, param);
|
|
||||||
assertNotNull(image);
|
|
||||||
}
|
|
||||||
@Test
|
|
||||||
public void testReadImage1027() throws IOException {
|
|
||||||
JPEGImageReader reader = createReader();
|
|
||||||
reader.setInput(ImageIO.createImageInputStream(getClassLoaderResource("/jpeg/read-error1027.jpg")));
|
|
||||||
|
|
||||||
ImageReadParam param = reader.getDefaultReadParam();
|
|
||||||
param.setSourceSubsampling(3, 3, 2, 2);
|
|
||||||
BufferedImage image = reader.read(0, param);
|
|
||||||
assertNotNull(image);
|
|
||||||
}
|
|
||||||
@Test
|
|
||||||
public void testReadImage1026() throws IOException {
|
|
||||||
JPEGImageReader reader = createReader();
|
|
||||||
reader.setInput(ImageIO.createImageInputStream(getClassLoaderResource("/jpeg/read-error1026.jpg")));
|
|
||||||
|
|
||||||
ImageReadParam param = reader.getDefaultReadParam();
|
|
||||||
param.setSourceSubsampling(3, 3, 1, 1);
|
|
||||||
BufferedImage image = reader.read(0, param);
|
|
||||||
assertNotNull(image);
|
|
||||||
}
|
|
||||||
@Test
|
|
||||||
public void testReadImage1025() throws IOException {
|
|
||||||
JPEGImageReader reader = createReader();
|
|
||||||
reader.setInput(ImageIO.createImageInputStream(getClassLoaderResource("/jpeg/read-error1025.jpg")));
|
|
||||||
|
|
||||||
ImageReadParam param = reader.getDefaultReadParam();
|
|
||||||
param.setSourceSubsampling(3, 3, 1, 1);
|
|
||||||
BufferedImage image = reader.read(0, param);
|
|
||||||
assertNotNull(image);
|
|
||||||
}
|
|
||||||
@Test
|
|
||||||
public void testReadImage1024() throws IOException {
|
|
||||||
JPEGImageReader reader = createReader();
|
|
||||||
reader.setInput(ImageIO.createImageInputStream(getClassLoaderResource("/jpeg/read-error1024.jpg")));
|
|
||||||
|
|
||||||
ImageReadParam param = reader.getDefaultReadParam();
|
|
||||||
param.setSourceSubsampling(3, 3, 1, 1);
|
|
||||||
BufferedImage image = reader.read(0, param);
|
|
||||||
assertNotNull(image);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user