作者iterator (rotareti)
看板C_Sharp
标题Re: [问题] 读灰阶影像的问题(灰阶值错误)
时间Fri Oct 5 04:33:01 2012
※ 引述《Ethan96 (他们称呼我"斗士")》之铭言:
: BitmapData sourceData = source.LockBits(new Rectangle(0, 0, width, height),
: ImageLockMode.ReadOnly, PixelFormat.Format8bppIndexed);
<中略>
: byte colorIndex = (byte)(((*pSource) * 0.3 + *(pSource + 1) * 0.59 +
: *(pSource + 2) * 0.11));
: 印出的值就不是17倍数了
: 参考看看
: unsafe要去专案属性勾起来
这里有 bug,
PixelFormat.Format8bppIndexed 代表的是使用 8bits 表示一个 pixel 的颜色,
所以一个 pixel 占的空间就是 1 byte,
但上面这段程式实际上是拿三个 pixel 的值在做运算, 所以算出来的值都是错误的.
实际上单取 *(pSource), *(pSource + 1), *(pSource + 2),
值会跟原发文者的相同, 一样都是 17 的倍数.
(另外这张图本来就已经是灰阶了, 并不需要套入 color to grayscale 的公式.)
还是维持在原推文内的观点, 这张图 "原来" 就只是张 16 阶(4 bit)的灰阶图片,
因为被从 16 阶颜色转成 256 阶颜色, 每一个值都经过 *17,
所以取出来的时候, 才会都是 17 的倍数.
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.113.23.102
1F:推 Ethan96:哈 没想到原本用24pp算就对了 感谢大大的解惑~ 10/05 09:48
2F:→ iterator:这篇文章最後的观点有误! 10/05 15:31