画像配列(0-255値)を高速にグレー処理する小ネタ(色覚特性は無視しています)

画像配列の処理結果(0-255値)をRGBグレーの配列に置き換えたい時の小ネタ

 

グレー処理の基本はRGBの値に0から255の値を入れる事と思っています。

RGBの各色に色覚特性の重みづけを行うことも多いですが、今回は無視。

Bitmapクラスに入れる前に、int Value(0-255値)を、int BitmapRGB値に変換します。

 

  • よくある方法ーbitシフトとbit orで生成する。(例:java
public int[] valueToGray(int[] imageValue ){
//imageValueの値は0-255の範囲とする
int mGray;
int [] ImageStore =new int [imageValue.length];
for (int i = imageValue.length - 1 ; i >= 0 ; i--){
mGray = imageValue[ i ];
ImageStore[i] = mGray | mGray << 8 | mGray << 16;
}
return ImageStore;
}

  • 掛け算の原理を使用すると以下の様に変換できる
public int[] valueToGray(int[] imageValue ){
//imageValueの値は0-255の範囲とする
int mGray;
int [] ImageStore =new int [imageValue.length];
for (int i = imageValue.length - 1 ; i >= 0 ; i--){
mGray = imageValue[ i ];
ImageStore[i] = mGray * 0x00010101;
}
return ImageStore;
}

結果は同じで、javaで実行すると3倍くらい早い。
上小ネタ。