从像素阵列转换图像

时间:2017-08-05 18:11:58

标签: java image-processing

  1. 我正在尝试将像素矩阵转换为图像,但它不起作用。谁能帮我?下面是代码。这里我添加了一个print语句来检查它是否正在运行,但它也没有执行。谁能帮助我呢
  2. 这是给出问题的代码。
  3. 这是完整的代码。
  4. import java.awt.Image;
    import java.awt.image.BufferedImage;
    import java.awt.image.ImageObserver;
    import java.awt.image.PixelGrabber;
    import java.awt.image.WritableRaster;
    import java.io.File;
    import java.io.IOException;
    import javax.imageio.ImageIO;
    
    public final class Util {
        /**
         * Converts a java.awt.Image into an array of pixels
         */
        public static int[] convertToPixels(Image img) {
            int width = img.getWidth(null);
    
            int height = img.getHeight(null);
            int[] pixel = new int[width * height];
    
            PixelGrabber pg = new PixelGrabber(img, 0, 0, width, height, pixel, 0, width);
            try {
                pg.grabPixels();
            } catch (InterruptedException e) {
                throw new IllegalStateException("Error: Interrupted Waiting for Pixels");
            }
            if ((pg.getStatus() & ImageObserver.ABORT) != 0) {
                throw new IllegalStateException("Error: Image Fetch Aborted");
            }
            return pixel;
        }
    
        public static Image getImageFromArray(int[] pixels, int width, int height) throws IOException {
            BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
            WritableRaster raster = (WritableRaster) image.getData();
            raster.setPixels(0, 0, width, height, pixels);
            File output = new File("C:\\out.png");
            ImageIO.write(image, "png", output);
            System.out.print("written");
            return image;
        }
    
        public static void main(String args[]) throws IOException {
            int width, height;
            BufferedImage source = ImageIO.read(new File(args[0]));
            width = source.getWidth();
            height = source.getHeight();
            // Util obj = new Util();
            Util.getImageFromArray(convertToPixels(source), width, height);
        }
    }
    

1 个答案:

答案 0 :(得分:0)

public static Image getImageFromArray(int[] pixels, int width, int height) throws IOException {
    BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
    WritableRaster raster = image.getRaster(); //faster - no copy
    raster.setDataElements(0, 0, width, height, pixels); //instead of setPixels
    File output = new File("C:\\out.png");
    ImageIO.write(image, "png", output);
    System.out.print("written");
    return image;
}