Avatar billede jba750 Nybegynder
13. september 2004 - 09:20 Der er 4 kommentarer og
1 løsning

Java RGB-værdier

Hej Eksperter
Jeg har indlæst et billede fra HD med:
    imgFile = new File(filename);
    try {
        BufferedImage myImage = ImageIO.read(imgFile);
    } catch(Exception exception){}

Nu vil jeg så gerne læse R,G og B-værdier for enkelte pixels i billedet. Hvordan kan dette lettest lade sig gøre? Jeg har selv prøvet med:
    Raster image = myImage.getData();
    int[] i = new int[3];
    int[] rgb = image.getPixel(x,y,i);
    r = rgb[0];
    g = rgb[1];
    b = rgb[2];

Desværre bliver g og b altid sat til 0 på denne måde.

Jeg tænkte at rgb[0] måske repræsenterede hele farven kompakt. Derfor prøvede jeg at sige:
    Color c = new Color(rgb[0]);
    int r = Color.getRed();
    int g = Color.getGreen();
    int b = Color.getBlue();

Dette resulterer desværre i at r og g altid er 0.

Nogen forslag til at løse dette lille problem? Findes der evt. en mere oplagt måde at gøre alt dette på?
Avatar billede Slettet bruger
13. september 2004 - 10:51 #1
Jeg har selv brugt følgende kode til at finde (og manipulere med RGBA-værdier i et Image:

---------- Kode snippet start ----------

Image image; // Load image here

// Create empty BufferedImage, sized to Image
BufferedImage img = new BufferedImage(image.getWidth(null), image.getHeight(null), BufferedImage.TYPE_INT_ARGB);

// Draw Image into BufferedImage
Graphics g = img.getGraphics();
g.drawImage(image, 0, 0, null);

// get Red, Green, Blue & Alpha values from a desired pixel
int rgba = img.getRGB(x, y); // X-coordinate, Y-coordinate
int red = (rgba >> 16) & 0xff;
int green = (rgba >> 8) & 0xff;
int blue = rgba & 0xff;
int alpha = (rgba >> 24) & 0xff;

---------- Kode snippet slut ----------

Håber det kunne bruges?
Avatar billede labanos Nybegynder
13. september 2004 - 11:01 #2
kender ingen oplagt måde, men fandt dette:

Get the color of a specific pixel
We assume that we have an Image called picture    pixels = new int[width*height];
    PixelGrabber pg = new PixelGrabber(picture, 0, 0, width, height, pixels, 0, width);
    try {
      pg.grabPixels();
      }
    catch (InterruptedException e)  { }

From here, individual pixel can be accessed via the pixels array.    int  c = pixels[index];    // or  pixels[x * width + y]
    int  red = (c & 0x00ff0000) >> 16;
    int  green = (c & 0x0000ff00) >> 8;
    int  blue = c & 0x000000ff;
    // and the Java Color is ...
    Color c = new Color(red,blue,green);

Ved ik om det virker, men prøv det?..
Avatar billede labanos Nybegynder
13. september 2004 - 11:02 #3
ups, havde ikke set corholio's svar (refresh yay)..
Avatar billede jba750 Nybegynder
13. september 2004 - 14:50 #4
Mange tak for hjælpen!
Avatar billede Slettet bruger
13. september 2004 - 18:26 #5
Velbekomme, jeg takker for point :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester