简单的内存法操作BMP图像函数

来源:互联网 发布:linux 脚本优先级 编辑:程序博客网 时间:2024/04/26 13:13

内存法一般来说是c#三种图像操作方法中最快速的,不过要操纵内存指针,有出错的可能。

一般流程就是锁定图像——指针处理——解锁图像。

下面贴一个自己整理的操作函数。

注意,只在ARGB图像上通过。

 C# Code 
private void Points(Bitmap bmp)
{
    Rectangle lockRect = new Rectangle(00, bmp.Width, bmp.Height);//要锁定的范围,一般来说是整幅图片
    BitmapData imgData = bmp.LockBits(lockRect, ImageLockMode.ReadOnly, bmp.PixelFormat);//锁定源图像
    //ImageLockMode分为ReadOnly、WriteOnly和ReadWrite,对应只读、只写和读写
    int rowOffset = imgData.Stride - bmp.Width * 4;//每一行的偏移量。因为要处理的是ARGB图像,所以*4
    unsafe//因为需要操作指针,所以放在Unsafe中,记得打开允许“不安全代码”
    {
        byte *imgPtr = (byte *)imgData.Scan0.ToPointer();//指向锁定区域的第一个像素
        for (int i = 0; i < bmp.Width; ++i)
        {
            for (int j = 0; j < bmp.Height; ++j)
            {
                imgPtr[0] = 255; //蓝,,给像素赋予特定颜色
                imgPtr[1] = 255; //绿
                imgPtr[2] = 255; //红
                imgPtr[3] = 255; //Alpha
                imgPtr += 4;   // 偏移一个像素
            }
            imgPtr += rowOffset;   // 偏移到下一行
        }
    }
    bmp.UnlockBits(imgData);//解锁源图像
}


0 0
原创粉丝点击