jhulme
jhulme

Reputation: 110

BufferedImage pixel value issue

We are trying to get the rgb values of a pixel in a buffered image using getRGB(x,y). Here is our code:

public Color getColor(Point p, BufferedImage image){
    int rgb = image.getRGB(p.x,p.y);
    Color c = new Color(rgb);
    return c;
}

But all we are getting for c is (255,0,0) and when we check the value of RGB we get -65536. We have looked around and seen lots of bit shifting solutions but none have worked. https://i.sstatic.net/3wPQe.jpg is an example of the frame. We were clicking on the green. Any ideas?

private void initFrameGrabber(String videoDevice, int inWidth, int inHeight, int channel, int videoStandard, int compressionQuality) throws V4L4JException { videoDev = new VideoDevice(videoDevice);

    DeviceInfo deviceInfo = videoDev.getDeviceInfo();

    if (deviceInfo.getFormatList().getNativeFormats().isEmpty()) {
      throw new ImageFormatException("Unable to detect any native formats for the device!");
    }
    ImageFormat imageFormat = deviceInfo.getFormatList().getNativeFormat(0);

    frameGrabber = videoDev.getJPEGFrameGrabber(inWidth, inHeight, channel, videoStandard,
            compressionQuality, imageFormat);

    frameGrabber.setCaptureCallback(new CaptureCallback() {
        public void exceptionReceived(V4L4JException e) {
            System.err.println("Unable to capture frame:");
            e.printStackTrace();
        }

        public void nextFrame(VideoFrame frame) {
            long before = System.currentTimeMillis();
            frameImage = frame.getBufferedImage();
            frame.recycle();
            processAndUpdateImage(frameImage, before);
        }
    });

    frameGrabber.startCapture();

    width = frameGrabber.getWidth();
    height = frameGrabber.getHeight();
}

Upvotes: 1

Views: 2023

Answers (1)

Andrew Thompson
Andrew Thompson

Reputation: 168845

I don't really see the problem in the image linked. The RGB values are less than 0, but form valid colors.

Screenshot

Image Test

Source

import java.awt.*;
import java.awt.image.BufferedImage;
import javax.swing.*;
import javax.imageio.ImageIO;

import java.net.URL;

class ImageTest {

    public static int getRGB(int x, int y, BufferedImage image) {
        return image.getRGB(x,y);
    }

    public static Color getColor(int x, int y, BufferedImage image) {
        int rgb = image.getRGB(x,y);
        Color c = new Color(rgb);
        return c;
    }

    public static void main(String[] args) throws Exception {
        BufferedImage bi = ImageIO.read(
            new URL("http://i.imgur.com/WMfeU.png"));
        int w = bi.getWidth();
        int h = bi.getHeight();

        final BufferedImage bi2 = new BufferedImage(
            w,
            h,
            BufferedImage.TYPE_INT_RGB);

        for (int x=0; x<w; x++) {
            for (int y=0; y<h; y++) {
                int rgb = getRGB(x,y,bi);
                if (x%20==0 && y%20==0) {
                    System.out.println(getColor(x,y,bi));
                }
                bi2.setRGB(x,y,rgb);
            }
        }

        SwingUtilities.invokeLater( new Runnable() {
            public void run() {
                JOptionPane.showMessageDialog(null,
                    new JLabel(new ImageIcon(bi2)));
            }
        });

    }
}

Output

java.awt.Color[r=115,g=148,b=77]
java.awt.Color[r=110,g=146,b=74]
java.awt.Color[r=111,g=147,b=77]
java.awt.Color[r=106,g=142,b=72]
java.awt.Color[r=106,g=141,b=73]
java.awt.Color[r=107,g=139,b=74]
java.awt.Color[r=75,g=95,b=46]
java.awt.Color[r=72,g=60,b=46]
java.awt.Color[r=108,g=92,b=79]
java.awt.Color[r=56,g=47,b=40]
java.awt.Color[r=32,g=28,b=27]
java.awt.Color[r=255,g=0,b=0]
java.awt.Color[r=104,g=79,b=59]
java.awt.Color[r=122,g=91,b=62]
java.awt.Color[r=60,g=61,b=47]
java.awt.Color[r=61,g=77,b=40]
java.awt.Color[r=103,g=134,b=66]
java.awt.Color[r=110,g=137,b=68]
java.awt.Color[r=111,g=138,b=69]
java.awt.Color[r=110,g=141,b=73]
java.awt.Color[r=114,g=146,b=73]
java.awt.Color[r=116,g=148,b=75]
java.awt.Color[r=115,g=147,b=74]
java.awt.Color[r=113,g=145,b=72]
java.awt.Color[r=113,g=147,b=73]
java.awt.Color[r=111,g=144,b=73]
java.awt.Color[r=114,g=147,b=76]
java.awt.Color[r=107,g=140,b=71]
java.awt.Color[r=110,g=142,b=75]
java.awt.Color[r=108,g=138,b=74]
java.awt.Color[r=73,g=92,b=46]
java.awt.Color[r=71,g=61,b=49]
java.awt.Color[r=111,g=93,b=81]
java.awt.Color[r=31,g=31,b=29]
java.awt.Color[r=36,g=36,b=36]
java.awt.Color[r=255,g=0,b=0]
java.awt.Color[r=103,g=78,b=56]
java.awt.Color[r=84,g=53,b=32]
java.awt.Color[r=58,g=58,b=46]
java.awt.Color[r=69,g=80,b=48]
java.awt.Color[r=106,g=136,b=66]
java.awt.Color[r=108,g=138,b=68]
java.awt.Color[r=106,g=136,b=66]
java.awt.Color[r=109,g=139,b=67]
java.awt.Color[r=117,g=147,b=75]
java.awt.Color[r=114,g=146,b=73]
java.awt.Color[r=113,g=145,b=72]
java.awt.Color[r=116,g=150,b=76]
java.awt.Color[r=112,g=146,b=72]
java.awt.Color[r=112,g=145,b=74]
java.awt.Color[r=111,g=144,b=73]
java.awt.Color[r=111,g=144,b=75]
java.awt.Color[r=109,g=142,b=73]
java.awt.Color[r=107,g=139,b=74]
java.awt.Color[r=75,g=94,b=48]
java.awt.Color[r=70,g=57,b=48]
java.awt.Color[r=96,g=79,b=69]
java.awt.Color[r=63,g=54,b=45]
java.awt.Color[r=61,g=52,b=45]
java.awt.Color[r=255,g=0,b=0]
java.awt.Color[r=100,g=79,b=62]
java.awt.Color[r=125,g=88,b=69]
java.awt.Color[r=59,g=59,b=47]
java.awt.Color[r=69,g=80,b=50]
java.awt.Color[r=107,g=137,b=67]
java.awt.Color[r=107,g=137,b=67]
java.awt.Color[r=107,g=134,b=63]
java.awt.Color[r=110,g=140,b=68]
java.awt.Color[r=114,g=144,b=70]
java.awt.Color[r=119,g=149,b=75]
java.awt.Color[r=113,g=145,b=72]
java.awt.Color[r=115,g=147,b=74]
java.awt.Color[r=112,g=144,b=71]
java.awt.Color[r=112,g=146,b=72]
java.awt.Color[r=111,g=144,b=73]
java.awt.Color[r=108,g=141,b=72]
java.awt.Color[r=111,g=142,b=74]
java.awt.Color[r=113,g=144,b=77]
java.awt.Color[r=73,g=92,b=46]
java.awt.Color[r=68,g=61,b=45]
java.awt.Color[r=180,g=153,b=136]
java.awt.Color[r=61,g=52,b=45]
java.awt.Color[r=59,g=52,b=44]
java.awt.Color[r=255,g=0,b=0]
java.awt.Color[r=96,g=75,b=54]
java.awt.Color[r=129,g=90,b=59]
java.awt.Color[r=63,g=63,b=51]
java.awt.Color[r=59,g=68,b=39]
java.awt.Color[r=102,g=132,b=62]
java.awt.Color[r=107,g=137,b=65]
java.awt.Color[r=107,g=137,b=65]
java.awt.Color[r=111,g=141,b=69]
java.awt.Color[r=115,g=145,b=73]
java.awt.Color[r=114,g=144,b=70]
java.awt.Color[r=112,g=144,b=71]
java.awt.Color[r=115,g=147,b=74]
java.awt.Color[r=113,g=145,b=72]
java.awt.Color[r=111,g=145,b=71]
java.awt.Color[r=110,g=143,b=72]
java.awt.Color[r=110,g=143,b=74]
java.awt.Color[r=110,g=143,b=74]
java.awt.Color[r=106,g=137,b=70]
java.awt.Color[r=76,g=89,b=45]
java.awt.Color[r=66,g=60,b=46]
java.awt.Color[r=104,g=82,b=71]
java.awt.Color[r=69,g=59,b=50]
java.awt.Color[r=70,g=60,b=51]
java.awt.Color[r=255,g=0,b=0]
java.awt.Color[r=102,g=77,b=55]
java.awt.Color[r=132,g=93,b=62]
java.awt.Color[r=52,g=48,b=36]
java.awt.Color[r=58,g=63,b=40]
java.awt.Color[r=103,g=130,b=61]
java.awt.Color[r=104,g=134,b=62]
java.awt.Color[r=108,g=135,b=64]
java.awt.Color[r=114,g=141,b=70]
java.awt.Color[r=114,g=144,b=72]
java.awt.Color[r=119,g=149,b=75]
java.awt.Color[r=115,g=145,b=73]
java.awt.Color[r=121,g=153,b=80]
java.awt.Color[r=111,g=143,b=70]
java.awt.Color[r=115,g=147,b=74]
java.awt.Color[r=116,g=148,b=75]
java.awt.Color[r=107,g=138,b=68]
java.awt.Color[r=107,g=138,b=70]
java.awt.Color[r=107,g=136,b=69]
java.awt.Color[r=73,g=89,b=44]
java.awt.Color[r=64,g=62,b=50]
java.awt.Color[r=83,g=65,b=53]
java.awt.Color[r=80,g=66,b=55]
java.awt.Color[r=73,g=61,b=49]
java.awt.Color[r=255,g=0,b=0]
java.awt.Color[r=103,g=79,b=55]
java.awt.Color[r=109,g=68,b=40]
java.awt.Color[r=69,g=66,b=51]
java.awt.Color[r=59,g=60,b=42]
java.awt.Color[r=101,g=131,b=61]
java.awt.Color[r=105,g=132,b=61]
java.awt.Color[r=106,g=133,b=62]
java.awt.Color[r=107,g=137,b=67]
java.awt.Color[r=115,g=143,b=69]
java.awt.Color[r=114,g=142,b=68]
java.awt.Color[r=115,g=143,b=69]
java.awt.Color[r=114,g=146,b=73]
java.awt.Color[r=110,g=142,b=69]
java.awt.Color[r=111,g=143,b=70]
java.awt.Color[r=109,g=141,b=68]
java.awt.Color[r=110,g=141,b=71]
java.awt.Color[r=107,g=138,b=70]
java.awt.Color[r=109,g=135,b=70]
java.awt.Color[r=75,g=86,b=43]
java.awt.Color[r=65,g=62,b=53]
java.awt.Color[r=78,g=59,b=42]
java.awt.Color[r=79,g=65,b=52]
java.awt.Color[r=76,g=64,b=52]
java.awt.Color[r=255,g=0,b=0]
java.awt.Color[r=105,g=79,b=54]
java.awt.Color[r=116,g=72,b=45]
java.awt.Color[r=84,g=72,b=58]
java.awt.Color[r=57,g=58,b=40]
java.awt.Color[r=97,g=126,b=59]
java.awt.Color[r=98,g=128,b=56]
java.awt.Color[r=103,g=133,b=61]
java.awt.Color[r=105,g=132,b=61]
java.awt.Color[r=108,g=136,b=62]
java.awt.Color[r=112,g=142,b=68]
java.awt.Color[r=109,g=139,b=67]
java.awt.Color[r=113,g=143,b=71]
java.awt.Color[r=112,g=142,b=70]
java.awt.Color[r=110,g=142,b=69]
java.awt.Color[r=109,g=141,b=68]
java.awt.Color[r=107,g=138,b=68]
java.awt.Color[r=104,g=135,b=67]
java.awt.Color[r=99,g=131,b=64]
java.awt.Color[r=77,g=85,b=46]
java.awt.Color[r=64,g=57,b=51]
java.awt.Color[r=83,g=66,b=46]
java.awt.Color[r=80,g=66,b=55]
java.awt.Color[r=76,g=62,b=49]
java.awt.Color[r=255,g=0,b=0]
java.awt.Color[r=106,g=82,b=58]
java.awt.Color[r=125,g=87,b=64]
java.awt.Color[r=106,g=88,b=74]
java.awt.Color[r=59,g=60,b=46]
java.awt.Color[r=92,g=123,b=55]
java.awt.Color[r=97,g=127,b=57]
java.awt.Color[r=101,g=128,b=59]
java.awt.Color[r=107,g=134,b=63]
java.awt.Color[r=109,g=136,b=65]
java.awt.Color[r=110,g=137,b=66]
java.awt.Color[r=105,g=135,b=63]
java.awt.Color[r=104,g=134,b=64]
java.awt.Color[r=106,g=138,b=65]
java.awt.Color[r=107,g=139,b=66]
java.awt.Color[r=107,g=138,b=68]
java.awt.Color[r=106,g=137,b=67]
java.awt.Color[r=105,g=136,b=68]
java.awt.Color[r=97,g=128,b=61]
java.awt.Color[r=73,g=80,b=39]
java.awt.Color[r=71,g=68,b=59]
java.awt.Color[r=84,g=67,b=57]
java.awt.Color[r=80,g=67,b=50]
java.awt.Color[r=82,g=69,b=53]
java.awt.Color[r=255,g=0,b=0]
java.awt.Color[r=106,g=81,b=59]
java.awt.Color[r=112,g=78,b=53]
java.awt.Color[r=116,g=94,b=71]
java.awt.Color[r=59,g=57,b=45]
java.awt.Color[r=88,g=117,b=51]
java.awt.Color[r=88,g=156,b=69]
java.awt.Color[r=95,g=127,b=54]
java.awt.Color[r=100,g=130,b=58]
java.awt.Color[r=102,g=132,b=60]
java.awt.Color[r=103,g=133,b=61]
java.awt.Color[r=92,g=116,b=54]
java.awt.Color[r=123,g=101,b=87]
java.awt.Color[r=65,g=67,b=53]
java.awt.Color[r=101,g=134,b=65]
java.awt.Color[r=97,g=128,b=58]
java.awt.Color[r=101,g=134,b=65]
java.awt.Color[r=100,g=131,b=63]
java.awt.Color[r=98,g=129,b=62]
java.awt.Color[r=69,g=72,b=41]
java.awt.Color[r=88,g=76,b=64]
java.awt.Color[r=89,g=72,b=56]
java.awt.Color[r=83,g=70,b=53]
java.awt.Color[r=82,g=68,b=55]
java.awt.Color[r=255,g=0,b=0]
java.awt.Color[r=103,g=78,b=56]
java.awt.Color[r=113,g=79,b=52]
java.awt.Color[r=123,g=93,b=67]
java.awt.Color[r=57,g=57,b=47]
java.awt.Color[r=48,g=145,b=50]
java.awt.Color[r=55,g=116,b=100]
java.awt.Color[r=87,g=124,b=55]
java.awt.Color[r=96,g=128,b=55]
java.awt.Color[r=104,g=134,b=62]
java.awt.Color[r=105,g=135,b=63]
java.awt.Color[r=94,g=104,b=51]
java.awt.Color[r=239,g=210,b=168]
java.awt.Color[r=74,g=63,b=45]
java.awt.Color[r=97,g=132,b=66]
java.awt.Color[r=97,g=130,b=61]
java.awt.Color[r=95,g=131,b=61]
java.awt.Color[r=91,g=126,b=58]
java.awt.Color[r=91,g=117,b=54]
java.awt.Color[r=56,g=54,b=29]
java.awt.Color[r=106,g=94,b=80]
java.awt.Color[r=81,g=65,b=50]
java.awt.Color[r=83,g=65,b=51]
java.awt.Color[r=79,g=66,b=50]
java.awt.Color[r=255,g=0,b=0]
java.awt.Color[r=103,g=79,b=55]
java.awt.Color[r=104,g=80,b=56]
java.awt.Color[r=99,g=79,b=55]
java.awt.Color[r=47,g=49,b=38]
java.awt.Color[r=70,g=109,b=46]
java.awt.Color[r=81,g=113,b=50]
java.awt.Color[r=80,g=111,b=44]
java.awt.Color[r=97,g=126,b=59]
java.awt.Color[r=101,g=131,b=59]
java.awt.Color[r=105,g=135,b=63]
java.awt.Color[r=105,g=126,b=59]
java.awt.Color[r=39,g=17,b=3]
java.awt.Color[r=140,g=127,b=93]
java.awt.Color[r=100,g=133,b=64]
java.awt.Color[r=88,g=125,b=56]
java.awt.Color[r=81,g=120,b=57]
java.awt.Color[r=77,g=119,b=55]
java.awt.Color[r=73,g=98,b=41]
java.awt.Color[r=53,g=52,b=34]
java.awt.Color[r=89,g=67,b=56]
java.awt.Color[r=84,g=67,b=51]
java.awt.Color[r=84,g=67,b=51]
java.awt.Color[r=77,g=64,b=48]
java.awt.Color[r=255,g=0,b=0]
java.awt.Color[r=110,g=86,b=62]
java.awt.Color[r=106,g=82,b=56]
java.awt.Color[r=106,g=82,b=58]
java.awt.Color[r=43,g=42,b=40]
java.awt.Color[r=53,g=53,b=41]
java.awt.Color[r=54,g=56,b=45]
java.awt.Color[r=53,g=53,b=41]
java.awt.Color[r=53,g=64,b=32]
java.awt.Color[r=84,g=101,b=47]
java.awt.Color[r=92,g=109,b=54]
java.awt.Color[r=89,g=109,b=50]
java.awt.Color[r=93,g=115,b=53]
java.awt.Color[r=94,g=114,b=53]
java.awt.Color[r=96,g=116,b=55]
java.awt.Color[r=78,g=83,b=42]
java.awt.Color[r=58,g=55,b=46]
java.awt.Color[r=56,g=56,b=44]
java.awt.Color[r=50,g=50,b=42]
java.awt.Color[r=40,g=35,b=29]
java.awt.Color[r=91,g=74,b=56]
java.awt.Color[r=90,g=71,b=54]
java.awt.Color[r=84,g=68,b=52]
java.awt.Color[r=74,g=60,b=49]

Upvotes: 1

Related Questions