java中图像与数组转换 50

请问怎么用java完成这两个操作:1.我有一张PNG格式的黑白图像,我想把这个图像导入到java程序中,然后把这个图像变成一个二维的数组,数组每个元素表示灰度。2.把一个... 请问怎么用java完成这两个操作:
1.我有一张PNG格式的黑白图像,我想把这个图像导入到java程序中,然后把这个图像变成一个二维的数组,数组每个元素表示灰度。
2.把一个二维数组每个元素表示灰度,转换成图片保存在硬盘里。
展开
 我来答
紫薇参星
科技发烧友

2016-05-20 · 有一些普通的科技小锦囊
知道大有可为答主
回答量:5984
采纳率:92%
帮助的人:3581万
展开全部

按照你的要求编写的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

如果想快,最好是直接从文件格式入手。。。。。。。。。。。。。。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式