イメージ上にテキストをオーバーレイする必要があります。このテキストは全体的な画像明度に基づいて明るくまたは暗くなるはずです。 イメージの全体的な(知覚される)明度を計算する方法は? Formula to determine brightness of RGB colorイメージ全体の明度を決定する
8
A
答えて
5
は私が解決しよう:それを唱える
public static double CalculateAverageLightness(Bitmap bm)
{
double lum = 0;
var tmpBmp = new Bitmap(bm);
var width = bm.Width;
var height = bm.Height;
var bppModifier = bm.PixelFormat == PixelFormat.Format24bppRgb ? 3 : 4;
var srcData = tmpBmp.LockBits(new Rectangle(0, 0, bm.Width, bm.Height), ImageLockMode.ReadOnly, bm.PixelFormat);
var stride = srcData.Stride;
var scan0 = srcData.Scan0;
//Luminance (standard, objective): (0.2126*R) + (0.7152*G) + (0.0722*B)
//Luminance (perceived option 1): (0.299*R + 0.587*G + 0.114*B)
//Luminance (perceived option 2, slower to calculate): sqrt(0.241*R^2 + 0.691*G^2 + 0.068*B^2)
unsafe
{
byte* p = (byte*)(void*)scan0;
for (int y = 0; y < height; y++)
{
for (int x = 0; x < width; x++)
{
int idx = (y * stride) + x * bppModifier;
lum += (0.299*p[idx + 2] + 0.587*p[idx + 1] + 0.114*p[idx]);
}
}
}
tmpBmp.UnlockBits(srcData);
tmpBmp.Dispose();
var avgLum = lum/(width * height);
return avgLum/255.0;
}
2
私はあなたがすることができるすべては、画像内のすべてのピクセルを測定し、平均値を取るだと思う:単一のピクセルのための何か面白いものを見つけ
。それがあなたの目的には遅すぎる場合は、均等に分布したピクセルサンプルを取って平均を計算することをお勧めします。また、テキストを描画する必要がある領域にピクセルを制限することもできます。
イメージをビットマップ(http://msdn.microsoft.com/en-us/library/system.drawing.bitmap.aspx)として読み込み、GetPixelメソッドを使用して実際に色の値を取得することができます。
どのように明るさを評価するかは、あなた次第です。私はいくつかのユーザーが人間の基準(色盲など)と違った色を感じるので、より簡単なアプローチ(最高の色彩値をとること)が実際にはより良いかもしれないことを示唆しています。
関連する問題
- 1. Nativescript - ページ全体の背景イメージを設定する
- 2. イメージの透明度を設定するIOS
- 3. イメージの明瞭度を設定するには?
- 4. イメージ全体のヘッダーサイズを取らない
- 5. フッターの背景イメージ - ページ幅全体?
- 6. 全体的な明るさ/ガンマ?
- 7. 角度Uiグリッド:固定列の行全体をハイライト表示
- 8. ASP.netの反転イメージの透明度
- 9. Androidイメージの資産の不透明度
- 10. パッケージ全体のデフォルトインポートを定義する
- 11. Androidイメージの鮮明化、彩度、色相、明るさ、コントラスト
- 12. 動的イメージのIE6透明度問題
- 13. UIBarButtonItemイメージの色/不透明度
- 14. シーン全体の明るさを変更する
- 15. 角度2のCookieServiceにページ全体のデータを設定する方法
- 16. アプリケーション全体の10進数の精度を設定する方法
- 17. iOSでイメージを含むWebページ全体をキャッシュする方法
- 18. 一度にファイル全体を読む
- 19. 一度にアプリ全体を終了
- 20. Dockerコンテナ/イメージ全体をエクスポート/保存する方法
- 21. Cコードベース全体のコード複雑度メトリック
- 22. アプリ全体にUIKeyboardAppearanceを設定する
- 23. Javaイメージの透明度(イメージが失われた)
- 24. 角度のあるアプリ全体を動的にロードする
- 25. イメージと透明度を使ってUITabBarをカスタマイズする
- 26. Monoのasp.net Webサイト全体を一度にコンパイルする
- 27. 角度2の全体像を変更する
- 28. トレーニングセット全体の精度を計算する
- 29. セシウムマップタイルの緯度/経度の決定
- 30. 透明なオーバーレイで全体のGoogleマップをカバーしますか?
なぜ-1票を、?コードは正常に動作します! –
'tmpBmp'を作成し、ビットを直接ロックするために' bm'を使わないのはなぜですか? – sergtk
最後に平均を255で割りますか? @ʞᴉɯ – TheCoolFrood