2010-12-04 8 views
0

私はasstetsフォルダから画像をコピーし、それを私のパッケージに貼り付けるだけです。最終画像には何も表示されません。私がペイントで絵を描こうとすると、「これは有効なビットマップファイルではありません」と表示されます。私のプログラムでAndroid:イメージのコピー&ペーストが動作しません!

は、私がこのように元の画像を読み取るために開始します。

private void copyImage() 
{ 
    AssetManager am = getResources().getAssets();    
    try{ 
     image = BitmapFactory.decodeStream(am.open("tasnim.png")); 
     imWidth = image.getWidth(); 
     imHeight = image.getHeight(); 
    } 
    catch(IOException e){ 
     e.printStackTrace(); 
     System.out.println("Error accoured!"); 
    } 
} 

次、私は画像のピクセルを取得したり、ピクセルを抽出し、整数(rgbstream)の配列内のピクセルを節約できます。

private void getPixelsOfImage() 
{ 
    rgbStream = new int[imWidth * imHeight]; 
    image.getPixels(rgbStream, 0, imWidth, 0, 0, imWidth, imHeight); 
} 

は最終的に、私は、私のパッケージにそれを保存したい

private void createPicture() 
{ 
    contextPath = context.getFilesDir().getAbsolutePath(); 
    String path = contextPath + "/" + picName; 

    try{ 
     FileOutputStream fos = new FileOutputStream(path); 
     DataOutputStream dos = new DataOutputStream(fos); 

     for(int i=0; i<rgbStream.length; i++) 
      dos.writeByte(rgbStream[i]); 

     dos.flush(); 
     dos.close(); 
     fos.close(); 
    } 
    catch(IOException e){ 
     System.out.println("IOException : " + e); 
    } 
    System.out.println("Picture Created."); 
} 

コードは、罰金が、結果に動作し、何もありません! :( DDMSをチェックすると、新しいファイルが作成され、すべてのピクセルが保存されます(このファイルのサイズは13300で、元の画像のサイズは100 * 133です)。私のデスクトップにそれを保存することができます。

あなたはどう思いますか?私のコードに問題はありますか? ありがとう

+0

私はほとんど肯定的ですが、それはpngの仕組みではありません。 – Falmarri

+0

「何もない」とは何かを説明できますか?ファイルはありますか?それはどれくらい大きいですか?あなたが16進ダンプを見るときの内容は何ですか?どのように開いていますか? – EboMike

+0

@Falmarri:それらはPNGファイルであるはずですか?コードが生の画像ファイルを書き出そうとしているようです。 – EboMike

答えて

1

あなたの意図がわかりません - あなたは生のイメージファイルを書きたいですか?あなたはJPEGまたはPNGまたは何を書きたいと仮定すると、

、あなたのコード全体を消去し、非常に簡単な何か行うことができます。もちろん、適切なエラーチェックで

Bitmap image = BitmapFactory.decodeStream(am.open("tasnim.png")); 
FileOutputStream fos = new FileOutputStream(path); 
image.compress(Bitmap.CompressFormat.PNG, 100, fos); 

を。

+0

本当にありがとうございます。私の目的は、PNG画像のピクセルを抽出し、ピクセル(ステガノグラフィ用)を操作し、この新しい画像を保存することです。私はこのコードを書いたが、うまくいかなかった。私の問題がどこにあるかを知るために、私は自分の問題を見つけるために上記のコードを実行しています。だから、私の最終的な写真は、容量、寸法、サイズの変更なしに元の写真と同じでなければなりません。ご協力いただきありがとうございます。 – Hesam

+0

喜んで、Hesam!私のアプローチはそのトリックを行うべきです。ビットマップを変更する方法はたくさんあります(最初にピクセルを取得する必要はありません)。このアプローチはあなたにとって完璧であるはずです。がんばろう! – EboMike

+0

EboMikeもう一度ありがとう、Bitmap.PNGに問題があるようです。私はいくつかのことをしましたが、解決できませんでした。それをチェックすることは可能ですか?再度、感謝します。 – Hesam

関連する問題