(注意:我不能使用任何直接调整图像大小的库,我想知道调整大小的核心逻辑)
我有一个尺寸为256 * 256的灰度图像。我想修改它并创建以下三个图像 a)尺寸为128 * 128的图像 b)尺寸为64 * 64的图像 c)尺寸为32 * 32的图像。
伪代码
File fi = new File("E:\\input.raw");
byte[] fileContent = Files.readAllBytes(fi.toPath());
File fo= new File("E:\\output.raw");
FileOutputStream stream = new FileOutputStream(fo);
int i=0;
for(;i<fileContent.length;i++){
//dividing by 2 to create image with dimensions 128*128
fileContent[i]= (byte) ((fileContent[i])/2);
stream.write(fileContent[i]);
}
stream.close();
以上代码不起作用。它正在创建256 * 256维度的图像。 由于某些原因,我不允许使用任何直接缩小尺寸的库。我想知道如何将256 * 256图像转换为128 * 128尺寸?
答案 0 :(得分:-1)
希望这会有所帮助
/**
* scale image
*
* @param sbi image to scale
* @param imageType type of image
* @param dWidth width of destination image
* @param dHeight height of destination image
* @param fWidth x-factor for transformation / scaling
* @param fHeight y-factor for transformation / scaling
* @return scaled image
*/
public static BufferedImage scale(BufferedImage sbi, int imageType, int dWidth, int dHeight, double fWidth, double fHeight) {
BufferedImage dbi = null;
if(sbi != null) {
dbi = new BufferedImage(dWidth, dHeight, imageType);
Graphics2D g = dbi.createGraphics();
AffineTransform at = AffineTransform.getScaleInstance(fWidth, fHeight);
g.drawRenderedImage(sbi, at);
}
return dbi;
}
答案 1 :(得分:-1)
使用ImageIO和Graphics2D可以按照以下方式完成
BufferedImage originalImage = ImageIO.read(new File("c:\\image\\test.jpg"));
int[] dims = {128, 64, 32};
for(int dim : dims) {
BufferedImage resizedImage = new BufferedImage(dim, dim, type);
Graphics2D g = resizedImage.createGraphics();
g.drawImage(originalImage, 0, 0, dim, dim, null);
g.dispose();
ImageIO.write(resizeImageJpg, "jpg", new File("c:\\image\\test_" + dim + "x" + dim + ".jpg"));
}