2 linda lindaaaa Linda_Lindaaaa 于 2015.06.16 17:14 提问

java中数组和图片的相互转换问题。

由于需求,我把一个灰度图片转成了一个short类型的数组。

 File file = new File("grayImage.jpg");
         BufferedImage src=ImageIO.read(file);
        int width=src.getWidth(null);
        int height=src.getHeight(null);
        int minX=src.getMinX();
        int minY=src.getMinY();
        short[] rgb = new short[3]; 
        short[] grayImage=new short[width*height];
        for(int i=minX;i<height;i++){
        for(int j=minY;j<width;j++){   

            //System.out.print(bi.getRGB(jw, ih));   
            int pixel=src.getRGB(j, i);   
            rgb[0] = (short) ((pixel & 0xff0000 ) >> 16) ;   
            rgb[1] = (short) ((pixel & 0xff00 ) >> 8) ;   
            rgb[2] = (short) (pixel & 0xff );   
            grayImage[i*width+j]=(short)(rgb[0] * 0.299 + rgb[1] * 0.587 + rgb[2] * 0.114);
            }
        }

现在我对的到的grayImage操作完了,并对像素值做了一些修改,那我应该如何
把short[] grayImage再转成图片格式呢?

2个回答

tongyi55555
tongyi55555   2015.06.17 14:15
已采纳

试试这个呢,不是用short数组,用的int数组,输出的是灰度图片。

int[] data1 = new int[grayImage.length];
        for (int i = 0; i < data1.length; i++) {
            data1[i] =  new Color(grayImage[i],grayImage[i],grayImage[i]).getRGB();
        }
        BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_BYTE_GRAY);
        image.setRGB(minX, minY, width, height, data1, 0, width);
        String path = "D:\\test.png";
        try {
            ImageIO.write(image, "png", new File(path));
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }```

Linda_Lindaaaa
Linda_Lindaaaa 这个可以,多谢多谢!!
大约 3 年之前 回复
gamefinity
gamefinity   Rxr 2015.06.17 07:14

把灰度转为彩色?不可能的吧.把彩色转为灰度应该属于有损压缩,恢复不回去的了.
只是要转成图片格式的话,把RGB都设成灰度的数值就可以了

Linda_Lindaaaa
Linda_Lindaaaa 只是想转成图片格式,不用转成彩色。我试试你说的方法。
大约 3 年之前 回复
Linda_Lindaaaa
Linda_Lindaaaa 只是想转成图片格式,不用转成彩色。我试试你说的方法。
大约 3 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
java中数组与集合相互转换
//集合转数组,只能转成对象数组(不能转成基本类型的数组) ArrayList integerList = new ArrayList<>(); integerList.add(1); integerList.add(2); Integer[] intArray = integerList.toArray(new Integer[]{
java 实现 图片文件 与 byte 数组互相转换
package webgate; import java.awt.image.BufferedImage; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.IOException; import javax.imageio
java图片和数组相互转换
import java.awt.image.BufferedImage; import java.io.File; import javax.imageio.ImageIO; import java.io.IOException; //图片到二维数组 public static int[][] imageToArray(String path) throws IOException{ Fi
Java 数组和集合的相互转换
System.out.println("-----数组转list-----"); String[] strs1 = new String[] {"1", "2", "3"}; List asList = Arrays.asList(strs1); asList.forEach(s -> System.out.println(s));
java List、Set与Array之间的相互转换
java List、Set与Array之间的相互转换 java List、Set与Array之间的相互转换
Java中字符串和byte数组互相转换
1.string 字符串转 byte[]数组 String str = "Hello";byte[] srtbyte = str.getBytes();2.. byte[] 转 stringString res = new String(srtbyte);System.out.println(res);3.设定编码方式的转换如下String str = "hello";byte[] srtbyte
字符串和字节数组互相转换,转换后数据不丢失
string a = Convert.ToBase64String(myByte); byte[] b = Convert.FromBase64String(a);
JAVA IO流实现字节数组与任何基本类型和引用类型的相互转换
package com.jyd.demo;import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; import java.
python图像与数组的关系
灰度图像只有1个通道,读取为数组的shape为[m,n],坐标[m,n]就是图像中m行n列位置的像素。RGB图像有3个通道,读取为数组的shape为[x,y,z], 只管看为x个y行z列的矩阵组成的ndarray。而在使用plt.imshow()作图时,可以这样理解:x表示RGB图的第x行,y表示RGB图的第y列,z表示RGB图的第z个通道。cifar图像从pickle恢复时shape为[-1,3...
Bitmap加载、变换、显示图片
Bitmap的使用,加载Drawable、Assert、SDcard上的图片,进行变换、压缩等操作,Bitmap和Drawable相互转换,Bitmap和数组的相互转换。