13. september 2004 - 09:20Der 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å?
Sigtbarheden i detailbranchen er lavere end nogensinde før.
13. juni 2024
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;
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);
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.