Browse Source

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 years ago
parent
commit
e18eef07b1

+ 15
- 9
src/java/org/apache/poi/sl/draw/BitmapImageRenderer.java View File

} }
double w_old = img.getWidth(); double w_old = img.getWidth();
double h_old = img.getHeight(); 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 w_new = dim.getWidth();
double h_new = dim.getHeight(); double h_new = dim.getHeight();
BufferedImage scaled = new BufferedImage((int)w_new, (int)h_new, BufferedImage.TYPE_INT_ARGB);
AffineTransform at = new AffineTransform(); AffineTransform at = new AffineTransform();
at.scale(w_new/w_old, h_new/h_old); at.scale(w_new/w_old, h_new/h_old);
AffineTransformOp scaleOp = new AffineTransformOp(at, AffineTransformOp.TYPE_BILINEAR); AffineTransformOp scaleOp = new AffineTransformOp(at, AffineTransformOp.TYPE_BILINEAR);


@Override @Override
public void setAlpha(double alpha) { 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 View File

import java.io.InputStream; import java.io.InputStream;


import org.apache.poi.hemf.usermodel.HemfPicture; 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.draw.ImageRenderer;
import org.apache.poi.sl.usermodel.PictureData; import org.apache.poi.sl.usermodel.PictureData;
import org.apache.poi.util.Units; import org.apache.poi.util.Units;


@SuppressWarnings("unused")
public class HemfImageRenderer implements ImageRenderer { public class HemfImageRenderer implements ImageRenderer {
HemfPicture image; HemfPicture image;
double alpha; double alpha;
image.draw(g, new Rectangle2D.Double(0,0,dim.getWidth(),dim.getHeight())); image.draw(g, new Rectangle2D.Double(0,0,dim.getWidth(),dim.getHeight()));
g.dispose(); 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 @Override

+ 3
- 11
src/scratchpad/src/org/apache/poi/hwmf/draw/HwmfImageRenderer.java View File

import java.io.InputStream; import java.io.InputStream;


import org.apache.poi.hwmf.usermodel.HwmfPicture; 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.DrawPictureShape;
import org.apache.poi.sl.draw.ImageRenderer; import org.apache.poi.sl.draw.ImageRenderer;
import org.apache.poi.sl.usermodel.PictureData.PictureType; import org.apache.poi.sl.usermodel.PictureData.PictureType;
g.setRenderingHint(RenderingHints.KEY_FRACTIONALMETRICS, RenderingHints.VALUE_FRACTIONALMETRICS_ON); g.setRenderingHint(RenderingHints.KEY_FRACTIONALMETRICS, RenderingHints.VALUE_FRACTIONALMETRICS_ON);
image.draw(g, new Rectangle2D.Double(0,0,dim.getWidth(),dim.getHeight())); image.draw(g, new Rectangle2D.Double(0,0,dim.getWidth(),dim.getHeight()));
g.dispose(); 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 @Override

Loading…
Cancel
Save