2012-03-26 8 views
2

ホワイトボードアプリを書いています。ビットマップ(描画ページ)をレンダリングして、そのビットマップをサーフェスビューにコピーします。エミュレータでは完全に動作しますが、Samsung Galaxy Aceで動作させると、予期せず終了します。このコード:canvas.setBitmap(ビットマップ)はエミュレータでは動作しますが電話機では動作しません

public void surfaceCreated(SurfaceHolder holder) { 
Log.d(TAG, "Create surface");   
mo_paper = BitmapFactory.decodeResource(getResources(), R.drawable.paper); 
Log.d(TAG, "Created paper");    
mo_easel = new Canvas();  
Log.d(TAG, "Created easel");    
mo_easel.setBitmap(mo_paper); 
Log.d(TAG, "Set easel");    
mo_matrix = new Matrix(); 
Log.d(TAG, "Assets loaded");    
mainThread.setRunning(true); 
mainThread.start(); 
Log.d(TAG, "Threads started");   
} 

出力がなく、「設定しイーゼル」「イーゼルを作成しました」、.setBitmap()メソッドは、エラーの原因となって表示されます。

+0

したい他のどんなビットマップ上に描画することでしたので、inMutableは11前のAPIの上では不可能であるオプションを設定しますちょうどddms/logcat? – Peterdk

+0

また、ビットマップの大きさ(ピクセル単位)はどれですか? – antlersoft

+0

@Peterdk - ログキャストだけの爆弾。 DDMSの使い方はまだ分かりません! ;) –

答えて

0

リソースからロードされたビットマップは不変です。結果のビットマップを不変にしたいとBitmapFactoryに指示するBitmapFactory.Optionsを渡す必要があります。

+0

いいえ。私はトレースして、エミュレータでは、ビットマップが変更可能として読み込まれていることがわかりましたが、電話ではそうではありません。このアプリはHTC Desire-Zでも動作しますので、OSの違いと思われます。私は、携帯電話とエミュレータのAPIレベル10で2.3.3を実行しているはずです。 しかし、ビットマップをinMutableに設定する方法が見つかりませんでした。ドキュメントをチェックすると、inMutableはAPI 11以降です。グーグルは、ビットマップを変換するためのメソッドを書く必要があることを示唆しています。http://sudarnimalan.blogspot.co.uk/2011/09/android-convert-immutable-bitmap-into.html –

+0

"結果のビットマップは不変の* "は"結果のビットマップは* **変更可能** "にする必要がありますか? –

0

ロマン・ガイが正しくありました。電話では、ビットマップは不変としてロードされていましたが、エミュレータと別の電話機では、(ドキュメントに反して)変更可能なものとしてロードされていました。私の場合には、簡単な解決策は

mo_paper = Bitmap.createBitmap(paperWidth, paperHeight, Bitmap.Config.ARGB_8888); 

と空のビットマップを作成し、単にエラー何私が

関連する問題