浏览代码

Refactor alpha handling

git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1863601 13f79535-47bb-0310-9956-ffa450edef68
tags/REL_4_1_1
Andreas Beeker 4 年前
父节点
当前提交
e18eef07b1

+ 15
- 9
src/java/org/apache/poi/sl/draw/BitmapImageRenderer.java 查看文件

@@ -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);
}

public static BufferedImage setAlpha(BufferedImage image, double alpha) {
if (image == null) {
return new BufferedImage(1, 1, BufferedImage.TYPE_INT_ARGB);
}

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();
if (alpha == 0) {
return image;
}

img = newImg;
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);
}



+ 3
- 10
src/scratchpad/src/org/apache/poi/hemf/draw/HemfImageRenderer.java 查看文件

@@ -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

+ 3
- 11
src/scratchpad/src/org/apache/poi/hwmf/draw/HwmfImageRenderer.java 查看文件

@@ -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

正在加载...
取消
保存