java中图像与数组转换

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java中图像与数组转换相关的知识,希望对你有一定的参考价值。

请问怎么用java完成这两个操作:
1.我有一张PNG格式的黑白图像,我想把这个图像导入到java程序中,然后把这个图像变成一个二维的数组,数组每个元素表示灰度。
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();
  
 

运行结果:

图片输出完毕!

原图:           

输出图:

参考技术A java.awt.image.BufferedImage

如果想快,最好是直接从文件格式入手。。。。。。。。。。。。。。

如何获取相册中图像的图像文件名和标签?

【中文标题】如何获取相册中图像的图像文件名和标签?【英文标题】:How to get Image Filename and Tag of images in photos album? 【发布时间】:2012-06-11 04:28:01 【问题描述】:

有没有办法获取相册中图片的图片文件名和标签?

我正在使用ALAssetsLibrary,但仍在抓挠......

【问题讨论】:

【参考方案1】:

您可以将ALAssetLibrary 对象复制到一个数组中(或者在本地数据库中更好)。使ALAsset 的对象显示并给它们标记(取决于数组索引)。

否则,如果您仍希望继续使用图像名称。您可以从UIImagePickerControllerReferenceURL 获取它们。尝试substring函数获取名称(提示:大多在&amp;ext之前,也可以获取文件的扩展名。)

【讨论】:

【参考方案2】:
ALAssetRepresentation *AssetRepObj = [AssetObj defaultRepresentation];
NSString *FileName = [AssetRepObj filename];

【讨论】:

以上是关于java中图像与数组转换的主要内容,如果未能解决你的问题,请参考以下文章

用于 Numpy 数组中图像的图像数据生成器

Python图像处理库PIL中图像格式转换

Python图像处理库PIL中图像格式转换

Python图像处理库PIL中图像格式转换

系统开发基础:UML中图的相关知识笔记(下)

java中数组如何转换成List?