加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读