2013-06-19 15 views
7

Mam obraz w formacie byte[] w moim kodzie Java. Chcę, aby następujące informacje zostały wyodrębnione z tej tablicy. Jak mogę to zrobić tak szybko, jak to możliwe.Wyodrębnij szerokość, wysokość, kolor i typ obrazu z tablicy bajtów.

  • Szerokość
  • Wysokość
  • kolorów (czarny & białe, kolorowe lub przezroczyste? Jeśli kolor, co jest głównym kolor?)
  • Typ (Czy obraz PNG, GIF, JPEG, itd.)
+1

Wyodrębnianie tego rodzaju informacji przy użyciu operacji bitowych na macierzy bajtów jest dużym zadaniem. Używałbym do tego jakiejś biblioteki. – Simon

+0

Utwórz obraz jakiegoś rodzaju (może używając 'ImageIO') i wyodrębnij właściwości obrazu. – MadProgrammer

+0

@Simon Nie mam problemu z używaniem biblioteki. –

Odpowiedz

9

Użyj ImageIO, aby odczytać jako buforowany obraz, a następnie uzyskać odpowiednie rzeczy, które chcesz. Zobacz dokumentacja java pod adresem http://docs.oracle.com/javase/6/docs/api/javax/imageio/ImageIO.html.

import java.awt.image.BufferedImage; 
import java.io.ByteArrayInputStream; 
import java.io.IOException; 
import java.io.InputStream; 

import javax.imageio.ImageIO; 


public class Test { 

    /** 
    * @param args 
    * @throws IOException 
    */ 
    public static void main(String[] args) throws IOException { 
     // assuming that picture is your byte array 
     byte[] picture = new byte[30]; 

     InputStream in = new ByteArrayInputStream(picture); 

     BufferedImage buf = ImageIO.read(in); 
     ColorModel model = buf.getColorModel(); 
     int height = buf.getHeight(); 

    } 

} 
+0

Czy możesz podać mi fragment kodu? Naprawdę to doceniam. –

+0

Specjalnie dla części kolorystycznej. –

+0

Dzięki za edycję. A co z informacjami o kolorze? Czy jest to możliwe dzięki "BufferedImage"? Dzięki. –

5

Aby uzyskać typ obrazu z tablicy bajtów, można zrobić coś takiego:

byte[] picture = new byte[30]; 
ImageInputStream iis = ImageIO.createImageInputStream(new ByteArrayInputStream(picture)); 

Iterator<ImageReader> readers = ImageIO.getImageReaders(iis); 
while (readers.hasNext()) { 
    ImageReader read = readers.next(); 
    System.out.println("format name = " + read.getFormatName()); 
} 

Oto wynik mam dla różnych plikach:

format name = png 
format name = JPEG 
format name = gif 

It został zainspirowany:

Convert Byte Array to image in Java - without knowing the type

+0

pracował z mnie ... thnks :) –

+0

Cool. ..Dzięki !! –

Powiązane problemy