java生成随机的argb图像不会生成可以打开的图像

jc3wubiy  于 2021-06-27  发布在  Java
关注(0)|答案(1)|浏览(284)

我正在尝试生成随机数组并将它们保存为argb图像。但是,当我这样做的时候,当我打开 .png 图像,图像是空白的,好像它们都有一个0的阿尔法,不管我用什么软件打开它们。这是我目前的代码:

import java.io.*;
import java.text.*;
import java.util.*;
import javax.imageio.ImageIO;
import java.awt.image.*;

public class RandomColour
{
    public static void main(String[] args) {
        int w = 100;
        int h = 100;
        int arr[] = new int[w*h];
        for (int i = 0; i < arr.length; i++) {
            int r = (int) (Math.random() * 254);
            int g = (int) (Math.random() * 254);
            int b = (int) (Math.random() * 254);
            arr[i] = 0xFF000000 | (r << 16) | (g << 8) | b;
        }
        BufferedImage outputImage = new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB);
        WritableRaster raster = outputImage.getRaster();
        raster.setSamples(0, 0, w, h, 0, arr);
        try {
            ImageIO.write(outputImage, "png", new File("output.png"));
        } catch(Exception e){
            System.out.println(e);
        }
        System.out.println("Finished generating a random image.");

    }
}
wnvonmuf

wnvonmuf1#

代码主要看起来不错。问题是如何使用 raster.setSamples(0, 0, w, h, 0, arr) . 注意最后的第二个参数(不言自明的名称) b ?)即“波段”。这意味着您的代码只为波段0设置样本,在本例中,波段0是r或红色分量。
如果将这一行更改为:

raster.setDataElements(0, 0, w, h, arr);

您的代码将按预期工作,并且png将包含随机的“静态”噪声。不需要其他更改。
附言:这只适用于你的形象 TYPE_INT_ARGB ,作为 setDataElements 假定数组的格式与光栅的传输类型相同。

相关问题