0

私はアンドロイド用のガウスフィルターを書いています。

このチュートリアルのGaussFilterの例によると、http ://www.jhlabs.com/ip/blurring.htmlこのようにALPHA値を編集しています。

alpha += f * ((pixelValue >> 24) & 0xff);

このスレッドによると: RGB値に論理ビットシフトを使用する

 (pixelValue >>24 & 0xff);

と同等ではありません

Color.alpha(pixelValue);

私の知る限り、RGBではアルファチャネルはオプションです。したがって、alphaとrgbのvlauesをどのように読んで編集するかは深さに依存します。

たとえば、さまざまな色深度の組み合わせがたくさんあります。

  • 4ビットアルファなし
  • 4ビット+4ビットアルファ
  • アルファ(?)を含む24ビット
  • Macintoshは24ビットプラス(または含む?)8ビットアルファを提供します

ユーザーがどのタイプの画像を処理したいかわからないので、すべての組み合わせをキャッチする必要があります。Color.Red(value)、Color.Green(value)...を使用するだけですが、これが最終的に遅すぎるかどうかはわかりませんか?処理する前にすべての入力を24ビットビットマップに変換できますが、これには時間がかかりすぎます。

どんな助けでもありがたいです、ありがとう。

4

1 に答える 1

0
  1. まず、パフォーマンスが心配な場合は、それを実装して測定する必要があります。

  2. 可能な限り最速の実装が必要な場合は、ピクセル形式ごとに特化する必要があります。ただし、ほとんどの場合、処理する必要があるのは1つだけです。以下を参照してください。

  3. 一方、ビットマップをビットマップクラスインスタンスとしてロードすると仮定すると、可能なピクセル形式は4ARGB_8888つだけであり、おそらく気にする必要があるのはそれだけです(おそらくRGB_565、これもそうですが、このような小さなピクセルでの優れたぼかし効果は期待できません。ピクセルあたりのビット値)。実際、BitmapFactory.OptionsのARGB_8888ドキュメントによると、ビットマップはデフォルトで構成とともにロードされます。つまり、標準のAndroidのビットマップ処理APIを使用すると、変換を行う必要はありません。変換は自動的に行われます。必要な形式を指定するだけです。

  4. 実際(pixelValue >>24 & 0xff);、ピクセル形式とColor.alpha(pixelValue);同等ですが、より適切に実行できます。ARGB_8888

ビット31..8は常に0であるため、論理シフト演算子(>>算術シフトではなく)を使用すると、操作はまったく必要ありません。実装方法を参照してください。& 0xFFColor.alpha()

public static int alpha(int color) {
    return color >>> 24;
}
于 2012-11-12T14:07:44.217 に答える