c# – 编辑8bpp索引位图
发布时间:2020-12-16 00:13:13 所属栏目:百科 来源:网络整理
导读:我正在尝试编辑8bpp的像素.由于此PixelFormat已编制索引,因此我知道它使用颜色表来映射像素值.即使我可以通过将位图转换为24bpp来编辑位图,但8bpp编辑速度要快得多(13ms vs 3ms).但是,在访问8bpp位图时更改每个值会导致一些随机的rgb颜色,即使PixelFormat仍
我正在尝试编辑8bpp的像素.由于此PixelFormat已编制索引,因此我知道它使用颜色表来映射像素值.即使我可以通过将位图转换为24bpp来编辑位图,但8bpp编辑速度要快得多(13ms vs 3ms).但是,在访问8bpp位图时更改每个值会导致一些随机的rgb颜色,即使PixelFormat仍为8bpp.
我目前正在开发c#,算法如下: (C#) 1-将原始位图加载到8bpp 2-创建具有8bpp的空温度位图,其大小与原始尺寸相同 两个位图的3-LockBits,使用P / Invoke,调用c方法,我传递每个BitmapData对象的Scan0. (我使用了c方法,因为它在迭代Bitmap的像素时提供了更好的性能) (C ) 4-根据一些参数创建一个int [256]调色板,并通过将原始像素值传递到调色板来编辑临时位图字节. (C#) 5- UnlockBits. 我的问题是如何在没有奇怪的rgb颜色的情况下编辑像素值,甚至更好地编辑8bpp位图的颜色表? 解决方法
根本不需要进入C土地或使用P / Invoke; C#完全支持指针和不安全的代码;我甚至可能会猜测这会导致你的问题.
颜色可能来自默认的调色板.您会发现更改调色板应该不会很慢.这是我创建灰度调色板的方法: image = new Bitmap( _size.Width,_size.Height,PixelFormat.Format8bppIndexed); ColorPalette pal = image.Palette; for(int i=0;i<=255;i++) { // create greyscale color table pal.Entries[i] = Color.FromArgb(i,i,i); } image.Palette = pal; // you need to re-set this property to force the new ColorPalette (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |