2011-11-15 65 views
0

我正在製作一個顯示房間圖片的應用程序。當用戶點擊圖片時,圖片會彈出對象的單詞,並且設備會顯示名稱。爲了做到這一點,我在對象的位置加載了具有彩色塊的圖案圖像,並將不同對象名稱映射到該塊的特定顏色的文本文件。在Android應用程序中解析Java生成的圖像

我還製作了一個可用於創建這兩個文件的Java應用程序。用戶在圖像上繪製矩形,應用程序將繪製的矩形保存到新的圖像文件中。

以下是創建/保存圖像的Java代碼:

BufferedImage i = new BufferedImage(img.getWidth(), img.getHeight(),   
      BufferedImage.TYPE_INT_RGB); 
    Graphics g = i.getGraphics(); 
    g.setColor(Color.BLACK); 
    g.fillRect(0, 0, i.getWidth(), i.getHeight()); 

    //draw all the rectangles on the image 
    for(Rectangle r: rects.keySet()){ 
     g.setColor(rects.get(r)); 
     g.fillRect(r.x, r.y, r.width, r.height); 
    } 

    //write the BufferedImage to the file 
    try { 
     ImageIO.write(i, "png", saveTo); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

當我在Photoshop中,塗料等打開圖片,它驗證彩色塊是他們應該是顏色。

當我在Android設備中加載它們時,它們的顏色不一樣。它們在每種顏色的1-3範圍內有所不同(因此25:0:0的顏色讀取爲24:0:0或可能爲22:0:0)。

在設備上,我將圖像作爲位圖加載,並使用TouchEvent.getX()和getY()來查找圖像上的位置。然後我使用Bitmap.getPixel(x,y)來獲取特定的顏色。

如果我使用像Photoshop或Paint這樣的編輯器,我會得到像正常一樣閱讀的完美圖像。我的用戶已經要求他們自己的編輯器應用程序,所以它也可以創建配置文件。

對不起,這是很長的時間,並感謝您的幫助!

回答

1

加載彩色塊作爲資產,而不是資源。 Android壓縮並重新打包資源文件夾中的位圖以最小化它們的大小。我相信壓縮是導致你的顏色轉變的原因。

使用ADB從設備中拉出圖像可能會很有趣,看看設備上的圖像是否實際上不同。我期望它是。

資產文件夾中包含的位圖根本沒有處理。將這些用於需要以現有質量維護的圖像。

+0

我當時正在加載圖像作爲資產。我只是意識到我在Java代碼中設置了錯誤的位圖(我使用了TYPE_INT_RGB而不是TYPE_INT_ARGB) – fitztho

相關問題