
java中图像与数组转换 50
请问怎么用java完成这两个操作:1.我有一张PNG格式的黑白图像,我想把这个图像导入到java程序中,然后把这个图像变成一个二维的数组,数组每个元素表示灰度。2.把一个...
请问怎么用java完成这两个操作:
1.我有一张PNG格式的黑白图像,我想把这个图像导入到java程序中,然后把这个图像变成一个二维的数组,数组每个元素表示灰度。
2.把一个二维数组每个元素表示灰度,转换成图片保存在硬盘里。 展开
1.我有一张PNG格式的黑白图像,我想把这个图像导入到java程序中,然后把这个图像变成一个二维的数组,数组每个元素表示灰度。
2.把一个二维数组每个元素表示灰度,转换成图片保存在硬盘里。 展开
2个回答
展开全部
按照你的要求编写的Java程序如下:( 要注意的地方见语句后面的注释)
import java.awt.image.BufferedImage;
import java.awt.image.RenderedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
public class ImageWithArray {
public static void main(String[] args) {
// 读取图片到BufferedImage
BufferedImage bf = readImage("c:\\tmp\\6\\female.png");//这里写你要读取的绝对路径+文件名
// 将图片转换为二维数组
int[][] rgbArray1 = convertImageToArray(bf);
// 输出图片到指定文件
writeImageFromArray("c:\\tmp\\2.png", "png", rgbArray1);//这里写你要输出的绝对路径+文件名
System.out.println("图片输出完毕!");
}
public static BufferedImage readImage(String imageFile){
File file = new File(imageFile);
BufferedImage bf = null;
try {
bf = ImageIO.read(file);
} catch (IOException e) {
e.printStackTrace();
}
return bf;
}
public static int[][] convertImageToArray(BufferedImage bf) {
// 获取图片宽度和高度
int width = bf.getWidth();
int height = bf.getHeight();
// 将图片sRGB数据写入一维数组
int[] data = new int[width*height];
bf.getRGB(0, 0, width, height, data, 0, width);
// 将一维数组转换为为二维数组
int[][] rgbArray = new int[height][width];
for(int i = 0; i < height; i++)
for(int j = 0; j < width; j++)
rgbArray[i][j] = data[i*width + j];
return rgbArray;
}
public static void writeImageFromArray(String imageFile, String type, int[][] rgbArray){
// 获取数组宽度和高度
int width = rgbArray[0].length;
int height = rgbArray.length;
// 将二维数组转换为一维数组
int[] data = new int[width*height];
for(int i = 0; i < height; i++)
for(int j = 0; j < width; j++)
data[i*width + j] = rgbArray[i][j];
// 将数据写入BufferedImage
BufferedImage bf = new BufferedImage(width, height, BufferedImage.TYPE_INT_BGR);
bf.setRGB(0, 0, width, height, data, 0, width);
// 输出图片
try {
File file= new File(imageFile);
ImageIO.write((RenderedImage)bf, type, file);
} catch (IOException e) {
e.printStackTrace();
}
}
}
运行结果:
图片输出完毕!
原图:
输出图:
2016-05-20
展开全部
java.awt.image.BufferedImage
如果想快,最好是直接从文件格式入手。。。。。。。。。。。。。。
如果想快,最好是直接从文件格式入手。。。。。。。。。。。。。。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |