получить RGB-YCbCr компоненты изображения - PullRequest
0 голосов
/ 28 марта 2012

Я хочу показать каналы jpeg image R_G_B как отдельные изображения в каналах jlabel и Y-Cb-Cr, я получил массивы, но не знаю, как преобразовать их в изображения ///

Edit: большое спасибо, это метод, который я пишу, теперь он может отображать только верхнюю левую четверть изображения и отображать его синим цветом независимо от цветового канала?

      public void getRGB_YCC(int width,int height,String inFileName) {
            R=new int[height][width];G=new int[height][width];
            B=new int[height][width];Y=new int[height][width];
            Cb1=new int[height][width];Cr1=new int[height][width];
            final int values[] = new int[width * height];
            int r, g, b, Y_ch,Cb,Cr, y, x;

            final PixelGrabber grabber = new PixelGrabber(image.getSource(), 0, 0,width,height, values, 0, width);

                try {
                if (grabber.grabPixels() != true) {
                try {
                throw new AWTException("Grabber returned false: " + grabber.getStatus());
                } catch (final Exception e) {};
                }
                } catch (final InterruptedException e) {};
                int index = 0;
        for (y = 0; y < height; ++y) {
                for (x = 0; x < width; ++x) {
                r = values[index] >> 16 & 0xff;
                g = values[index] >> 8 & 0xff;
                b = values[index] & 0xff;

                Y_ch= (int)(0.299 * r + 0.587 * g + 0.114 * b);
                Cb= 128 + (int) (-0.16874 * r - 0.33126 * g + 0.5 * b);
                Cr= 128 + (int)(0.5 * r - 0.41869 * g - 0.08131 * b);
                R [y][x]=r;
                G [y][x]=g;
                B [y][x]=b;
                Y [y][x]=Y_ch; 
                Cb1[y][x]=Cb; 
                Cr1[y][x]=Cr;
                index++;
                }
        }
    BufferedImage img = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
    int[] pixels = ((DataBufferInt)img.getRaster().getDataBuffer()).getData();
    for(  y=0;y<height;y++)
    {
    for(  x=0;x<width;x++)
    {
        pixels[x + y*width] =R[y][x]<<16;
    }
    }

     jLabel15.setIcon(new ImageIcon(img));

        }

1 Ответ

1 голос
/ 28 марта 2012

Простой и быстрый способ получить массив пикселей в изображении - это BufferedImage :

Этот пример создает 8-битное изображение в градациях серого и получает для него «пиксельный буфер»:

BufferedImage img = new BufferedImage(w, h, BufferedImage.TYPE_BYTE_GRAY);
byte[] pixels = ((DataBufferByte)img.getRaster().getDataBuffer()).getData();

Это также работает с RGB:

BufferedImage img = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB);
int[] pixels = ((DataBufferInt)img.getRaster().getDataBuffer()).getData();

Теперь вы можете устанавливать пиксели, просто записывая в массив pixels, например pixels[x + y * w] = value, и результаты сразу видны.

...