Refactor alpha handling

git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1863601 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Andreas Beeker 2019-07-22 21:30:12 +00:00
parent 58eb1a8070
commit e18eef07b1
3 changed files with 21 additions and 30 deletions

View File

@ -244,9 +244,9 @@ public class BitmapImageRenderer implements ImageRenderer {
}
double w_old = img.getWidth();
double h_old = img.getHeight();
BufferedImage scaled = new BufferedImage((int)w_old, (int)h_old, BufferedImage.TYPE_INT_ARGB);
double w_new = dim.getWidth();
double h_new = dim.getHeight();
BufferedImage scaled = new BufferedImage((int)w_new, (int)h_new, BufferedImage.TYPE_INT_ARGB);
AffineTransform at = new AffineTransform();
at.scale(w_new/w_old, h_new/h_old);
AffineTransformOp scaleOp = new AffineTransformOp(at, AffineTransformOp.TYPE_BILINEAR);
@ -263,16 +263,22 @@ public class BitmapImageRenderer implements ImageRenderer {
@Override
public void setAlpha(double alpha) {
if (img == null) return;
img = setAlpha(img, alpha);
}
Dimension dim = getDimension();
BufferedImage newImg = new BufferedImage((int)dim.getWidth(), (int)dim.getHeight(), BufferedImage.TYPE_INT_ARGB);
Graphics2D g = newImg.createGraphics();
RescaleOp op = new RescaleOp(new float[]{1.0f, 1.0f, 1.0f, (float)alpha}, new float[]{0,0,0,0}, null);
g.drawImage(img, op, 0, 0);
g.dispose();
public static BufferedImage setAlpha(BufferedImage image, double alpha) {
if (image == null) {
return new BufferedImage(1, 1, BufferedImage.TYPE_INT_ARGB);
}
img = newImg;
if (alpha == 0) {
return image;
}
float[] scalefactors = {1, 1, 1, (float)alpha};
float[] offsets = {0,0,0,0};
RescaleOp op = new RescaleOp(scalefactors, offsets, null);
return op.filter(image, null);
}

View File

@ -30,10 +30,12 @@ import java.io.IOException;
import java.io.InputStream;
import org.apache.poi.hemf.usermodel.HemfPicture;
import org.apache.poi.sl.draw.BitmapImageRenderer;
import org.apache.poi.sl.draw.ImageRenderer;
import org.apache.poi.sl.usermodel.PictureData;
import org.apache.poi.util.Units;
@SuppressWarnings("unused")
public class HemfImageRenderer implements ImageRenderer {
HemfPicture image;
double alpha;
@ -89,16 +91,7 @@ public class HemfImageRenderer implements ImageRenderer {
image.draw(g, new Rectangle2D.Double(0,0,dim.getWidth(),dim.getHeight()));
g.dispose();
if (alpha != 0) {
BufferedImage newImg = new BufferedImage((int)dim.getWidth(), (int)dim.getHeight(), BufferedImage.TYPE_INT_ARGB);
g = newImg.createGraphics();
RescaleOp op = new RescaleOp(new float[]{1.0f, 1.0f, 1.0f, (float)alpha}, new float[]{0,0,0,0}, null);
g.drawImage(bufImg, op, 0, 0);
g.dispose();
bufImg = newImg;
}
return bufImg;
return BitmapImageRenderer.setAlpha(bufImg, alpha);
}
@Override

View File

@ -30,6 +30,7 @@ import java.io.IOException;
import java.io.InputStream;
import org.apache.poi.hwmf.usermodel.HwmfPicture;
import org.apache.poi.sl.draw.BitmapImageRenderer;
import org.apache.poi.sl.draw.DrawPictureShape;
import org.apache.poi.sl.draw.ImageRenderer;
import org.apache.poi.sl.usermodel.PictureData.PictureType;
@ -93,17 +94,8 @@ public class HwmfImageRenderer implements ImageRenderer {
g.setRenderingHint(RenderingHints.KEY_FRACTIONALMETRICS, RenderingHints.VALUE_FRACTIONALMETRICS_ON);
image.draw(g, new Rectangle2D.Double(0,0,dim.getWidth(),dim.getHeight()));
g.dispose();
if (alpha != 0) {
BufferedImage newImg = new BufferedImage((int)dim.getWidth(), (int)dim.getHeight(), BufferedImage.TYPE_INT_ARGB);
g = newImg.createGraphics();
RescaleOp op = new RescaleOp(new float[]{1.0f, 1.0f, 1.0f, (float)alpha}, new float[]{0,0,0,0}, null);
g.drawImage(bufImg, op, 0, 0);
g.dispose();
bufImg = newImg;
}
return bufImg;
return BitmapImageRenderer.setAlpha(bufImg, alpha);
}
@Override