Android(1.5)で作業していますが、バイト配列の形で100以上のグレースケール画像があります。 Canvasで単色を描画するためのアルファマスクとして画像を使用したいと思います。画像は固定されていますが、色は変わります。各画像/カラーの組み合わせに対してビットマップオブジェクトを作成できますが、それはひどく非効率です。メモリとスピードの両方に関して、この問題にアプローチするにはどうすればよいでしょうか? (Iは各画像/カラーコンボこの何回も行う必要がある。)アルファマスクの色付け方法
4
A
答えて
4
:
- は、各ピクセルの色が(< < 24灰色)に設定されているARGB_8888ビットマップを作成| 0xFFFFFF。
- 各色について、新しいPorterDuffColorFilter(color、PorterDuff.Mode.MULTIPLY)を作成します。
- レンダリングするには、Paintオブジェクトを作成し、使用する色に対応するフィルタでsetColorFilter()を呼び出します。その後、BitmapおよびPaintオブジェクトを使用してcanvas.drawBitmapを呼び出します。
単色の場合、これは、私が望むビットマップを正確に構築し、ペイントオブジェクトなしで描画するほど高速ではないかもしれませんが、イメージ/カラーコンボごとにビットマップよりもはるかに効率的です。
0
IピクセルにアクセスするgetImageData()
、キャンバスに画像をブリットするdrawImage
を使用し、その後、画像データの.data
をループ、設定なります各ピクセルのRGB値を定数に、4番目の値(アルファ)を画像から取得した値に置き換えます。この半透明のキャンバスは、必要な部分に重ねて表示できます。
を編集してください:a working exampleを私のウェブサイトに掲載しました。 Chrome/Safariでのみ動作します。私は私が探していた答え見つけたと思う
1
float contrast = 100/180.f; float scale = contrast + 1.f;
cm.set(new float[] {
scale, 0, 0, 0, 0,//Red
0, 1.5f, 0, 0, 0,//Green
0, 0, 1.5f, 0, 0,//Blue
0, 0, 0, 1, 0 });//alpha
bmpGrayscale = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Bitmap.Config.RGB_565);
Canvas c = new Canvas(bmpGrayscale);
Paint paint = new Paint();
ColorMatrixColorFilter f = new ColorMatrixColorFilter(cm);
paint.setColorFilter(f);
c.drawBitmap(bitmap, 0, 0, paint);
/*BitmapDrawable bmd = new BitmapDrawable(bmpGrayscale);
photo_view.setBackgroundDrawable(bmd);*/
photo_view.setImageBitmap(bmpGrayscale);
関連する問題
- 1. PCoAのコードスキャッタプロットの色付け方法
- 2. mozillaのスクロールバーの色付け方法は?
- 3. node.jsのconsole.traceの色付け方法は?
- 4. スライダーバー(sliderInput)の色付け方法は?
- 5. 番号の色付け方法
- 6. 色付けボタン
- 7. スクロールビューのiosアルファマスク
- 8. スペースウィジェットの色付け
- 9. リッチテキストエディタの色付け
- 10. 黄色から赤色に周期的に色を付ける方法
- 11. NSComboBoxのポップアップメニューのテキストの色付け方法は?
- 12. matplotlibの3D散布図のデータポイントを色付けする方法
- 13. spanning tdsでHtmlテーブルの列の色を付ける方法
- 14. c#リッチテキストボックスの各行の色付け方法
- 15. レンダラー適用時のJtableセルの色付け方法
- 16. 等価要素のテーブルセルグループの色付け方法
- 17. オープンオフィスのcalc数値テキストの色付け方法
- 18. swift後のCGBitmapInfoアルファマスク
- 19. Python Plotly library for networks:異なる色のノードを色付けする方法
- 20. primengのテーブルデータを色付けする方法
- 21. Wordで表のセルを色付けする方法が速く
- 22. chartjs 2+棒グラフの色付けを指定する方法
- 23. ngTagsInputでタグの色付けを設定する方法は?
- 24. xtableでセルの色付けを行う方法
- 25. TreeViewerの行の色付け
- 26. バーの色付けjqplot
- 27. gtkmmボタンの色付け
- 28. primefaces datatable行の色付け
- 29. WPFでの色付け
- 30. 行全体の色付け
私はこのようなことをしていました。私が完全に説明していなかった問題は、各イメージを何度もキャッシュして再利用できるソリューションが必要だということです。私は、必要なときにイメージを再生成する余裕がなく、必要な各色のイメージをキャッシュする余裕がありません。 –
@TedHoppあなたは解決策がありがとうございます。しかし、上記の私のソリューションは、色ごとのバリエーションをキャッシュせずに画像データをキャッシュします。画像データは(window.onload'の中の115行目)一度だけロードされ、(updateColor()の一部として)スライダを更新するたびに色ごとのバリエーションが再作成されることに注意してください。 – Phrogz
私が避けようとしていたのは、色ごとのバリエーションごとに新しい画像を生成することでした。 Porter-Duffカラーフィルターはまさにこれを行うようです。 –