请教高手c#中bitmap转灰度的几个问题

jlevylee 2010-11-10 09:28:41
1.public void handlepic( ref Bitmap img )
{
width = img.Width;
height = img.Height;

int fW = ( ( ( width - 1 ) / 8 ) + 1 );
int fH = ( ( ( height - 1 ) / 8 ) + 1 );
int len = fW * fH;
}
这里的 FW 和 FH;width和height;len分别代表什么意思?

2.(接上输代码)
{
BitmapData data = image.LockBits(
new Rectangle( 0, 0, width, height ),
ImageLockMode.ReadOnly, PixelFormat.Format24bppRgb );
private byte[] buf = null;
int offset = stride-width * 3;
int len = (int)( ( width-1 ) / 8 ) + 1;
int rem = ( (width -1 ) % 8 ) + 1;
int[] tmp = new int[len];
int i, j, t1, t2, k = 0;

unsafe
{
byte * src = (byte *) data.Scan0.ToPointer( );

for ( int y = 0; y < height; )
{

Array.Clear( tmp, 0, len );


for ( i = 0; ( i < 8 ) && ( y < height ); i++, y++ )
{

for ( int x = 0; x < width; x++, src += 3 )
{

tmp[(int) ( x / 8 )] += (int)( 0.2125f * src[RGB.R] + 0.7154f * src[RGB.G] + 0.0721f * src[RGB.B] );
}
src += offset;
}

// get average values
t1 = i * 8;
t2 = i * rem;

for ( j = 0; j < len - 1; j++, k++ )
buf[k] = (byte)( tmp[j] / t1 );
buf[k++] = (byte)( tmp[j] / t2 );
}
}
这里的 rem?tmp[(int) ( x / 8 )]和t1,t2 有什么意义?求指点~
...全文
282 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
liuwei2500 2010-11-11
  • 打赏
  • 举报
回复
这里的 FW 和 FH;width和height;len分别代表什么意思?
width是图片的宽度,height图片的高度,FW是指横向字节数,FH纵向字节数,len总的字节数
rem是数据在每行的偏移量。位图在内存中的表现形式并不是对齐的
gomoku 2010-11-11
  • 打赏
  • 举报
回复
其实该代码质量不高,还不如不要嚼它。
jlevylee 2010-11-11
  • 打赏
  • 举报
回复
FW和FH是字节数?为何
[Quote=引用 1 楼 liuwei2500 的回复:]

这里的 FW 和 FH;width和height;len分别代表什么意思?
width是图片的宽度,height图片的高度,FW是指横向字节数,FH纵向字节数,len总的字节数
rem是数据在每行的偏移量。位图在内存中的表现形式并不是对齐的
[/Quote]

111,129

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧