2013-11-22 5 views
1

Я хочу сравнить импортированные изображения с изображениями из базы данных. До сих пор я создал это, но я получаю сообщение об ошибке:Ошибка при сравнении изображения из базы данных

Uncaught error fetching image: 
java.lang.NullPointerException 
    at java.io.FileInputStream.<init>(FileInputStream.java:103) 
    at java.io.FileInputStream.<init>(FileInputStream.java:66) 
    at sun.awt.image.FileImageSource.getDecoder(FileImageSource.java:35) 
    at sun.awt.image.InputStreamImageSource.doFetch(InputStreamImageSource.java:240) 
    at sun.awt.image.ImageFetcher.fetchloop(ImageFetcher.java:172) 
    at sun.awt.image.ImageFetcher.run(ImageFetcher.java:136) 

Вот мой код:

String file1 = "C:\\Users\\Seth\\Desktop\\Capstone\\bill.jpg"; 
String file2; 

public void DBImages() throws ClassNotFoundException, SQLException { 

    String url = "jdbc:oracle:thin:@localhost:1521:ORCL"; 
    Connection conn = null; 
    Class.forName("oracle.jdbc.driver.OracleDriver"); 
    conn = DriverManager.getConnection(url, "c##lambros", "16111111"); 
    String sql = "SELECT foto FROM criminals WHERE criminal_id = 1"; 
    PreparedStatement stmt = conn.prepareStatement(sql); 
    ResultSet rset = stmt.executeQuery(); 
    byte[] bytes = null; 
    while (rset.next()) { 

     bytes = rset.getBytes(1); 
     file2 = bytes.toString(); 
     processImage(); 
    } 
} 


public void processImage() { 


    Image image1 = Toolkit.getDefaultToolkit().getImage(file1); 
    Image image2 = Toolkit.getDefaultToolkit().getImage(file2); 

    try { 

     PixelGrabber grab1 = new PixelGrabber(image1, 0, 0, -1, -1, false); 
     PixelGrabber grab2 = new PixelGrabber(image2, 0, 0, -1, -1, false); 

     int[] data1 = null; 

     if (grab1.grabPixels()) { 
      int width = grab1.getWidth(); 
      int height = grab1.getHeight(); 
      data1 = new int[width * height]; 
      data1 = (int[])grab1.getPixels(); 
     } 

     int[] data2 = null; 

     if (grab2.grabPixels()) { 
      int width = grab2.getWidth(); 
      int height = grab2.getHeight(); 
      data2 = new int[width * height]; 
      data2 = (int[])grab2.getPixels(); 
     } 

     System.out.println("Pixels equal: " + java.util.Arrays.equals(data1, data2)); 

    } catch (InterruptedException e1) { 
     e1.printStackTrace(); 
    } 
} 

public static void main(String args[]) { 
    CompareImage compare = new CompareImage(); 
    compare.processImage(); 
} 

Я думаю, что моя логика верна. Почему метод не может получить изображение из базы данных?

+0

@Kayaman Как преобразовать последовательность байтов [] в изображение? – Lambros

ответ

1

Ваша линия

file2 = bytes.toString(); 

совершенно неправильно. Ни в коем случае он никогда не записывал байты в файл. Вы явно не сделали File IO в Java.

Вы можете обойти запись файла в любом случае, если у вас достаточно памяти. Вы можете обернуть byte[] в ByteArrayInputStream и использовать ImageIO.read(), чтобы получить изображение из этого.

InputStream in = new ByteArrayInputStream(bytes); 
Image img = ImageIO.read(in); 
+0

ОК! и img? Как сделать файл? – Lambros

+0

Вам нужен файл? Похоже на ненужный шаг в вашем сравнении. В любом случае, прочитайте учебник по файлу IO по адресу http://docs.oracle.com/javase/tutorial/essential/io/ – Kayaman

+0

Не совсем, но как его использовать здесь gor file2? Изображение image1 = Toolkit.getDefaultToolkit(). GetImage (file1); Изображение image2 = Toolkit.getDefaultToolkit(). GetImage (file2); – Lambros

Смежные вопросы