如何在java中调整缓存的图像n图形2d? [英] How to resize the buffered image n graphics 2d in java?
本文介绍了如何在java中调整缓存的图像n图形2d?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
int width = 175;
Graphics2D gb = (Graphics2D) g;
bufferedimage = (BufferedImage) createImage(width, width);
Graphics2D graphics = bufferedimage.createGraphics();
graphics.setColor(/*this.getBackground()*/Color.red);
graphics.fillRect(0, 0, width, width);
我有大尺寸的缓冲...我必须调整缓冲图像的大小.. .plz你能帮助我吗?
hi i have the the buffered with big size...i have to resize the bufferd image...plz can u anyone help me?
推荐答案
public BufferedImage scaleImage(BufferedImage img, int width, int height,
Color background) {
int imgWidth = img.getWidth();
int imgHeight = img.getHeight();
if (imgWidth*height < imgHeight*width) {
width = imgWidth*height/imgHeight;
} else {
height = imgHeight*width/imgWidth;
}
BufferedImage newImage = new BufferedImage(width, height,
BufferedImage.TYPE_INT_RGB);
Graphics2D g = newImage.createGraphics();
try {
g.setRenderingHint(RenderingHints.KEY_INTERPOLATION,
RenderingHints.VALUE_INTERPOLATION_BICUBIC);
g.setBackground(background);
g.clearRect(0, 0, width, height);
g.drawImage(img, 0, 0, width, height, null);
} finally {
g.dispose();
}
return newImage;
}
更新:不同的算法
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.RenderingHints;
import java.awt.image.BufferedImage;
public enum Resizer {
NEAREST_NEIGHBOR {
@Override
public BufferedImage resize(BufferedImage source,
int width, int height) {
return commonResize(source, width, height,
RenderingHints.VALUE_INTERPOLATION_NEAREST_NEIGHBOR);
}
},
BILINEAR {
@Override
public BufferedImage resize(BufferedImage source,
int width, int height) {
return commonResize(source, width, height,
RenderingHints.VALUE_INTERPOLATION_BILINEAR);
}
},
BICUBIC {
@Override
public BufferedImage resize(BufferedImage source,
int width, int height) {
return commonResize(source, width, height,
RenderingHints.VALUE_INTERPOLATION_BICUBIC);
}
},
PROGRESSIVE_BILINEAR {
@Override
public BufferedImage resize(BufferedImage source,
int width, int height) {
return progressiveResize(source, width, height,
RenderingHints.VALUE_INTERPOLATION_BILINEAR);
}
},
PROGRESSIVE_BICUBIC {
@Override
public BufferedImage resize(BufferedImage source,
int width, int height) {
return progressiveResize(source, width, height,
RenderingHints.VALUE_INTERPOLATION_BICUBIC);
}
},
AVERAGE {
@Override
public BufferedImage resize(BufferedImage source,
int width, int height) {
Image img2 = source.getScaledInstance(width, height,
Image.SCALE_AREA_AVERAGING);
BufferedImage img = new BufferedImage(width, height,
source.getType());
Graphics2D g = img.createGraphics();
try {
g.drawImage(img2, 0, 0, width, height, null);
} finally {
g.dispose();
}
return img;
}
};
public abstract BufferedImage resize(BufferedImage source,
int width, int height);
private static BufferedImage progressiveResize(BufferedImage source,
int width, int height, Object hint) {
int w = Math.max(source.getWidth()/2, width);
int h = Math.max(source.getHeight()/2, height);
BufferedImage img = commonResize(source, w, h, hint);
while (w != width || h != height) {
BufferedImage prev = img;
w = Math.max(w/2, width);
h = Math.max(h/2, height);
img = commonResize(prev, w, h, hint);
prev.flush();
}
return img;
}
private static BufferedImage commonResize(BufferedImage source,
int width, int height, Object hint) {
BufferedImage img = new BufferedImage(width, height,
source.getType());
Graphics2D g = img.createGraphics();
try {
g.setRenderingHint(RenderingHints.KEY_INTERPOLATION, hint);
g.drawImage(source, 0, 0, width, height, null);
} finally {
g.dispose();
}
return img;
}
};
这篇关于如何在java中调整缓存的图像n图形2d?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文