2013-05-10 7 views
7

Ich möchte ein einzelnes großes Bitmap-Bild aus einer Datei laden, eine Funktion ausführen, die einzelne Pixel manipuliert, und dann die Bitmap speichern.Wie kann ich ein Bitmap-Bild laden und einzelne Pixel manipulieren?

if r=200,g=200,b=200 then +20 on all values, else -100 on all values 

Der Trick der Lage ist, sein zu laden ein Bitmap und in der Lage, jedes Pixel Zeile für Zeile zu lesen

:

Dateiformate können entweder PNG oder BMP, und die Manipulations Funktion ist etwas Einfaches wie sein

Gibt es in Java eine Standardbibliotheksmaschinerie, die diese E/A verarbeiten kann?

(Die Bitmap müssen mehrere Megapixel sein, muss ich der Lage sein, Millionen von Pixeln zu handhaben)

+1

zeigen den Code, den Sie versucht haben, bitte –

+0

@NikolayKuznetsov, ich habe im Moment keinen Code. Ich kann nicht einmal ein Bitmap in Java laden. – Joseph

+3

Beginnen Sie mit einem Blick auf [Lesen/Laden eines Bildes] (http://docs.oracle.com/javase/tutorial/2d/images/loadimage.html) – MadProgrammer

Antwort

7

Dank MadProgrammer Ich habe eine Antwort:

package image_test; 

import java.awt.image.BufferedImage; 
import java.io.File; 
import java.io.IOException; 
import javax.imageio.ImageIO; 

public class Image_test { 

    public static void main(String[] args) { 
     BufferedImage img = null; 
     try { 
      img = ImageIO.read(new File("test.bmp")); 
     } catch (IOException e) { 

     } 
     int height = img.getHeight(); 
     int width = img.getWidth(); 

     int amountPixel = 0; 
     int amountBlackPixel = 0; 

     int rgb; 
     int red; 
     int green; 
     int blue; 

     double percentPixel = 0; 

     System.out.println(height + " " + width + " " + img.getRGB(30, 30)); 

     for (int h = 1; h<height; h++) 
     { 
      for (int w = 1; w<width; w++) 
      { 
       amountPixel++; 

       rgb = img.getRGB(w, h); 
       red = (rgb >> 16) & 0x000000FF; 
       green = (rgb >> 8) & 0x000000FF; 
       blue = (rgb) & 0x000000FF; 

       if (red == 0 && green == 0 && blue == 0) 
       { 
        amountBlackPixel ++; 
       } 
      } 
     } 
     percentPixel = (double)amountBlackPixel/(double)amountPixel; 

     System.out.println("amount pixel: "+amountPixel); 
     System.out.println("amount black pixel: "+amountBlackPixel); 
     System.out.println("amount pixel black percent: "+percentPixel); 
    } 
}