2011-11-15 7 views
0

私は部屋の画像を表示するアプリケーションを作成しています。ユーザーが画像をクリックすると、画像がオブジェクトの単語でポップアップし、その名前がデバイスに表示されます。これを行うために、オブジェクトの場所に色付きのブロックを持つパターンイメージと、ブロックの特定の色にマップされた異なるオブジェクト名を持つテキストファイルを読み込みます。AndroidアプリケーションでJavaで生成された画像を解析する

また、これらの2つのファイルを作成するために使用できる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(); 
    } 

、それは色のブロックは、彼らがすることになっている色であることを確認します。

Android搭載端末に読み込んだとき、同じ色ではありません。色はそれぞれの色ごとに1〜3の範囲で異なります(したがって、25:0:0の色は24:0:0または22:0:0のように表示されます)。

デバイス上で、イメージをビットマップとしてロードし、TouchEvent.getX()およびgetY()を使用してイメージ上の位置を見つけます。その後、Bitmap.getPixel(x、y)を使用して特定の色を取得します。

私がPhotoshopやPaintのようなエディタを使用すると、普通のように読める完璧な画像が得られます。私のユーザは独自のエディタアプリケーションを要求しているので、configファイルも作成できます。

ご迷惑をおかけして申し訳ありませんが、ご長時間ご利用いただきありがとうございました!

答えて

1

色付きのブロックをアセットとして読み込み、リソースではありません。 Androidはリソースフォルダ内のビットマップを圧縮して再パッケージし、サイズを最小限に抑えます。私は圧縮があなたの色をシフトさせている原因だと信じています。

ADBを使用してデバイスから画像を引き出し、実際に画像が異なるかどうかを確認することは興味深いかもしれません。私はそれが期待されます。

assetsフォルダに含まれるビットマップはまったく処理されません。現在の品質で維持する必要のある画像に使用します。

+0

イメージをアセットとしてロードしています。私はちょうど私がJavaコードでビットマップを間違って設定したことに気が付いた(私はTYPE_INT_ARGBの代わりにTYPE_INT_RGBを使用した) – fitztho

関連する問題