import com.google.zxing.LuminanceSource;
+import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
-import java.awt.image.BufferedImageOp;
-import java.awt.image.AffineTransformOp;
import java.awt.geom.AffineTransform;
/**
int pixel = rgb[offset + x];
int luminance = (306 * ((pixel >> 16) & 0xFF) +
601 * ((pixel >> 8) & 0xFF) +
- 117 * (pixel & 0xFF)) >> 10;
+ 117 * (pixel & 0xFF) +
+ (0x200)) >> 10; // 0x200 = 1<<9, half an lsb of the result to force rounding
matrix[offset + x] = (byte) luminance;
}
}
@Override
public LuminanceSource crop(int left, int top, int width, int height) {
- return new BufferedImageLuminanceSource(image, left, top, width, height);
+ return new BufferedImageLuminanceSource(image, this.left + left, this.top + top, width, height);
}
// Can't run AffineTransforms on images of unknown format.
// Rotate 90 degrees counterclockwise.
AffineTransform transform = new AffineTransform(0.0, -1.0, 1.0, 0.0, 0.0, sourceWidth);
- BufferedImageOp op = new AffineTransformOp(transform, AffineTransformOp.TYPE_NEAREST_NEIGHBOR);
// Note width/height are flipped since we are rotating 90 degrees.
BufferedImage rotatedImage = new BufferedImage(sourceHeight, sourceWidth, image.getType());
- op.filter(image, rotatedImage);
+
+ // Draw the original image into rotated, via transformation
+ Graphics2D g = rotatedImage.createGraphics();
+ g.drawImage(image, transform, null);
+ g.dispose();
// Maintain the cropped region, but rotate it too.
int width = getWidth();