栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > .Net

灰度图指针c# 操作,picturebox image bitmap

.Net 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

灰度图指针c# 操作,picturebox image bitmap

提及.NET的指针操作,很多人并不是很了解,甚至还不知道有这么个东东
由于C#的指针操作属于unsafe操作,所以很多人对unsafe使用起来都很谨慎

其实所谓不安全代码,其实是不受控于CLR控制下的托管执行,相当于CLR领导下的部分区域自治,
当然CLR也不会去关心不安全代码的内存分配和回收


费话少说,先体验一下适当的指针操作带来的性能提升。
平时我们通过GDI+操作稍大点图片象素时,都会有一种濒临崩溃的感觉,我们转下用指针操作

灰度图

  Bitmap map = new Bitmap(pictureBox1.Image);
            // 将图片位图区域进行锁定
            BitmapData mapdata = map.LockBits(new Rectangle(0, 0, map.Width, map.Height), ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb);
            unsafe
            {
                byte* pixpoint;
                int newpoint;

                for (int i = 0; i < map.Width; i++)
                {
                    for (int j = 0; j < map.Height; j++)
                    {
                        // 位图结构存在一个字节对齐问题。      
                        pixpoint = (byte*)mapdata.Scan0 +i * 3 + j * mapdata.Stride;
                        newpoint = (*pixpoint * 11 + *(pixpoint + 1) * 59 + *(pixpoint + 2) * 30) / 100;

                        *(pixpoint++) = (byte)newpoint;
                        *(pixpoint++) = (byte)newpoint;
                        *(pixpoint++) = (byte)newpoint;

                    }
                }
            }
            // 将位图内存区域进行解锁
            map.UnlockBits(mapdata);
            pictureBox1.Image = map;
            //map.Dispose();
        }

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/954926.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号