从rgb像素值创建缓冲图像

我有一个RGB像素的整数数组,看起来像:

pixels[0] =  pixels[1] =  pixels[2] =  pixels[3] =  ...etc... 

我正在尝试从中创建一个BufferedImage。 我尝试了以下方法:

 BufferedImage img = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); img.getRaster().setPixels(0, 0, width, height, pixels); 

但是得到的图像有色带问题。 图像不清晰,通过它有对角线和水平线。

使用rgb值初始化图像的正确方法是什么?

编辑:这是我的图像的样子 替代文字

谢谢,杰夫

尝试使用setDataElements而不是setPixels

另一个选择是图像共享数组而不是从中复制(请参阅此答案以获取示例。)

不确定如何使用单个数组值。 我相信当你使用TYPE_INT_RGB时需要三个数组值来指定颜色:

 import java.awt.*; import java.awt.image.*; import javax.swing.*; public class ImageFromArray2 extends JFrame { int width = 50; int height = 50; int imageSize = width * height; public ImageFromArray2() { JPanel panel = new JPanel(); getContentPane().add( panel ); int[] pixels = new int[imageSize * 3]; // Create Red Image for (int i = 0; i < imageSize * 3; i += 3) { pixels[i] = 255; pixels[i+1] = 0; pixels[i+2] = 0; } panel.add( createImageLabel(pixels) ); // Create Green Image for (int i = 0; i < imageSize * 3; i += 3) { pixels[i] = 0; pixels[i+1] = 255; pixels[i+2] = 0; } panel.add( createImageLabel(pixels) ); // Create Blue Image for (int i = 0; i < imageSize * 3; i += 3) { pixels[i] = 0; pixels[i+1] = 0; pixels[i+2] = 255; } panel.add( createImageLabel(pixels) ); // Create Cyan Image for (int i = 0; i < imageSize * 3; i += 3) { pixels[i] = 0; pixels[i+1] = 255; pixels[i+2] = 255; } panel.add( createImageLabel(pixels) ); } private JLabel createImageLabel(int[] pixels) { BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); WritableRaster raster = image.getRaster(); raster.setPixels(0, 0, width, height, pixels); JLabel label = new JLabel( new ImageIcon(image) ); return label; } public static void main(String args[]) { JFrame frame = new ImageFromArray2(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.pack(); frame.setLocationRelativeTo( null ); frame.setVisible( true ); } } 

你无法获得正确图像的原因是这些像素包含rgb颜色,以便很好地设置你最常做的每个像素

 double[] pixelsArr=new double[4]; pixelsArr[0]=(Integer.parseInt(string2.trim())>>16) & 0xFF; pixelsArr[1]=(Integer.parseInt(string2.trim())>>8) & 0xFF; pixelsArr[2]=(Integer.parseInt(string2.trim())) & 0xFF; pixelsArr[3]=0xFF; img.getRaster().setPixels(col,row,1,1, pixelsArr); 

string2是整数像素col,每个像素和行的位置相同,1,1是每个像素的大小。