2013-05-10 10 views
7

Desidero caricare una singola immagine bitmap di grandi dimensioni da un file, eseguire una funzione che manipola i singoli pixel e quindi salvare nuovamente la bitmap.Come posso caricare un'immagine bitmap e manipolare i singoli pixel?

I formati di file possono essere sia PNG o BMP, e la funzione di manipolazione è qualcosa di semplice come ad esempio:

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

Il trucco è quello di poter caricare una bitmap e di essere in grado di leggere ogni riga di pixel per riga

Esiste un dispositivo di libreria standard in Java in grado di gestire questo I/O?

(La bitmap dovrà essere diversi megapixel, ho bisogno di essere in grado di gestire milioni di pixel)

+1

mostrano il codice che avete provato prega –

+0

@NikolayKuznetsov, non ho il codice al momento. Non riesco nemmeno a caricare un Bitmap in Java. – Joseph

+3

Inizia dando un'occhiata a [Leggere/caricare un'immagine] (http://docs.oracle.com/javase/tutorial/2d/images/loadimage.html) – MadProgrammer

risposta

7

Grazie a MadProgrammer ho una risposta:

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); 
    } 
} 
Problemi correlati