2011-01-19 15 views
0

私はAndroidアプリを開発していると私は奇妙な問題に直面していますを使用したオリジナルカラーです。 SurfaceViewで画像処理をしています。私は、キャンバスと、次の方法を使用して処理された画像を描画しています:私のSurfaceViewが着色背景(#1 3500ffff、一種の非常に濃い緑)を有し、画像が描画されるとアンドロイド:それを維持しないイメージがcanvas.drawBitmap

canvas.drawBitmap(image, x, y, paint) 

、私はそのことに気づくことができます元の色は保存されません。ビットマップアルファが変更された場合のように、非常にわずかな濃い緑色の色合いがあります。

誰もがすでにこの問題が発生しましたか?これを修正する方法がありますか?

+1

あなたは正しい色をしていますか? #00ffffはとても明るい緑のように私に見えます。アルファ= 35の方が、より透明であることを意味します。だから、あなたは暗い緑の色合いを持っているなら、それはあなたが黒い背景に透明なライトグリーンを描いていることを意味しますか? – f20k

+0

はい私は混乱して申し訳ありませんが、これは実際には非常に明るい緑です。これは私のレイアウトの背景に使用する色です。アルファ= 35なので、アクティビティの黒い背景に暗い緑のように見えます。 –

答えて

1

これは16ビットの宛先で発生します。 16ビットバッファは565形式のピクセルをエンコードします。これにより、緑のチャンネルの精度が向上し、時には緑がかった色合いになります。 32ビットのデスティネーション/ビットマップがこの問題を解決します。

+0

ビットマップのコピーをARGB_8888に設定し、SurfaceHolderのピクセルフォーマットをRGBA_8888に変更しましたが、問題を解決していないようです。私はどこかで間違っていますか? –

0

あなたのイメージは、あなたが塗料を定義しなかった、それは透明色であるか、またはいくつかの特殊効果を使用しないでくださいどのように透明ではないことを仮定。塗料にnullを使用してみてください。

他の事は何あなたが最初の画像や背景を描いているのですか?あなたの描画命令が正しいかどうか疑問に思うだけです。

あなたがイメージチェンジカラー不透明意志であるためにあなたの表面を設定した場合は?私はイベントsychronisationに接続されていると思う私が気づい

もう一つは、描画初期化画面上で非常に高速に指を動かしたときに時々表面に描画する半透明のスプライトを作成することです。

+0

ColorMatrixColorFilterを設定するにはペイントが必要です。私はまず背景を描画しています(xmlレイアウトで定義され、ビューが作成されるときに描画されます)。描画方法はSurfaceViewsのスレッドによって制御されているので、私のビットマップはループで描かれているので、非常にわずかな透明なスプライトが残念なことに気付くことがあります。 –

+0

ビットマップを描画する直前に背景色を描画する必要があります:canvas.drawColor(myColour); canvas.drawBitmap(image、x、y、paint); onDrawで。 ColorMatrixでどんな種類の塗料を作るのか分かりません... – Lumis

関連する問題