mirror of
https://github.com/apache/poi.git
synced 2026-02-27 20:40:08 +08:00
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:
parent
58eb1a8070
commit
e18eef07b1
@ -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);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user