首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何扩展BufferedImage

如何扩展BufferedImage
EN

Stack Overflow用户
提问于 2010-11-18 22:59:59
回答 7查看 116.6K关注 0票数 54

在javadoc之后,我尝试扩展BufferedImage,但没有成功,下面是我的代码:

代码语言:javascript
复制
BufferedImage image = MatrixToImageWriter.getBufferedImage(encoded);
Graphics2D grph = image.createGraphics();
grph.scale(2.0, 2.0);
grph.dispose();

我不明白为什么它不能工作,有什么帮助吗?

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2010-11-18 23:43:27

AffineTransformOp提供了选择插值类型的额外灵活性。

代码语言:javascript
复制
BufferedImage before = getBufferedImage(encoded);
int w = before.getWidth();
int h = before.getHeight();
BufferedImage after = new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB);
AffineTransform at = new AffineTransform();
at.scale(2.0, 2.0);
AffineTransformOp scaleOp = 
   new AffineTransformOp(at, AffineTransformOp.TYPE_BILINEAR);
after = scaleOp.filter(before, after);

显示的片段说明了,而不是裁剪(https://en.wikipedia.org/wiki/Cropping_(image%29);这是相关的answer寻址issue;一些相关的示例将分析here

票数 73
EN

Stack Overflow用户

发布于 2010-11-18 23:15:32

不幸的是,getScaledInstance()的性能非常差,如果没有问题的话。

另一种方法是创建一个新的BufferedImage,并在新的上绘制原始的缩放版本。

代码语言:javascript
复制
BufferedImage resized = new BufferedImage(newWidth, newHeight, original.getType());
Graphics2D g = resized.createGraphics();
g.setRenderingHint(RenderingHints.KEY_INTERPOLATION,
    RenderingHints.VALUE_INTERPOLATION_BILINEAR);
g.drawImage(original, 0, 0, newWidth, newHeight, 0, 0, original.getWidth(),
    original.getHeight(), null);
g.dispose();

newWidth、newHeight表示新的BufferedImage大小,必须正确计算。当使用因子缩放时:

代码语言:javascript
复制
int newWidth = new Double(original.getWidth() * widthFactor).intValue();
int newHeight = new Double(original.getHeight() * heightFactor).intValue();

编辑:找到说明性能问题的文章:The Perils of Image.getScaledInstance()

票数 39
EN

Stack Overflow用户

发布于 2014-02-24 05:52:15

使用imgscalr - Java Image Scaling Library:

代码语言:javascript
复制
BufferedImage image =
     Scalr.resize(originalImage, Scalr.Method.BALANCED, newWidth, newHeight);

这对我来说已经足够快了。

票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4216123

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档