我正在尝试生成随机数组并将它们保存为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.");
}
}
1条答案
按热度按时间wnvonmuf1#
代码主要看起来不错。问题是如何使用
raster.setSamples(0, 0, w, h, 0, arr)
. 注意最后的第二个参数(不言自明的名称)b
?)即“波段”。这意味着您的代码只为波段0设置样本,在本例中,波段0是r或红色分量。如果将这一行更改为:
您的代码将按预期工作,并且png将包含随机的“静态”噪声。不需要其他更改。
附言:这只适用于你的形象
TYPE_INT_ARGB
,作为setDataElements
假定数组的格式与光栅的传输类型相同。