C#的Bitmap.LockBits 使用说明
来源:互联网 发布:js获取当前时间加一年 编辑:程序博客网 时间:2024/05/17 03:11
转自:Bitmap.LockBits 方法 (Rectangle, ImageLockMode, PixelFormat)
将 Bitmap 锁定到系统内存中。(16.6.15Useful)
程序集: System.Drawing(System.Drawing.dll 中)
语法
[SecurityPermissionAttribute(SecurityAction.LinkDemand, Flags = SecurityPermissionFlag.UnmanagedCode)]public BitmapData LockBits(Rectangle rect,ImageLockMode flags,PixelFormat format)
参数
- rect
Rectangle 结构,它指定要锁定的 Bitmap 部分。
- flags
ImageLockMode 枚举,它指定 Bitmap 的访问级别(读/写)。
- format
PixelFormat 枚举,它指定此 Bitmap 的数据格式。
返回值
Type: System.Drawing.Imaging.BitmapDataBitmapData,它包含有关此锁定操作的信息。
异常
PixelFormat 不是特定的每像素位数值。
- 或 -
为位图传入了错误的 PixelFormat。
操作失败。
备注
使用 LockBits 方法,可在系统内存中锁定现有的位图,以便通过编程方式进行更改。尽管用 LockBits 方法进行大规模更改可获得更好的性能,但仍然可以用 SetPixel 方法来更改图像的颜色。
BitmapData 指定 Bitmap 的特性,如大小、像素格式、像素数据在内存中的起始地址以及每个扫描行的长度(步幅)。
调用此方法时,应使用包含特定的每像素位数 (BPP) 值的 System.Drawing.Imaging.PixelFormat 枚举的成员。使用 System.Drawing.Imaging.PixelFormat 值(如 Indexed 和 Gdi)会引发 System.ArgumentException。同样,为位图传递不正确的像素格式也会引发 System.ArgumentException。
示例
下面的代码示例演示如何使用 PixelFormat、Height、Width 和 Scan0 属性;LockBits 和 UnlockBits 方法;以及 ImageLockMode 枚举。此示例是针对使用 Windows 窗体而设计的。此示例不是设计用于像素格式,只是提供一个例子表明如何使用 LockBits 方法。若要运行此示例,请将其粘贴到一个窗体中,然后通过调用 LockUnlockBitsExample 方法处理该窗体的 Paint 事件,并将 e 作为 PaintEventArgs 传递。
private void LockUnlockBitsExample(PaintEventArgs e) { // Create a new bitmap. Bitmap bmp = new Bitmap("c:\\fakePhoto.jpg"); // Lock the bitmap's bits. Rectangle rect = new Rectangle(0, 0, bmp.Width, bmp.Height); System.Drawing.Imaging.BitmapData bmpData = bmp.LockBits(rect, System.Drawing.Imaging.ImageLockMode.ReadWrite, bmp.PixelFormat); // Get the address of the first line. IntPtr ptr = bmpData.Scan0; // Declare an array to hold the bytes of the bitmap. int bytes = Math.Abs(bmpData.Stride) * bmp.Height;��� byte[] rgbValues = new byte[bytes]; // Copy the RGB values into the array. System.Runtime.InteropServices.Marshal.Copy(ptr, rgbValues, 0, bytes); // Set every third value to 255. A 24bpp bitmap will look red. for (int counter = 2; counter < rgbValues.Length; counter += 3) rgbValues[counter] = 255; // Copy the RGB values back to the bitmap System.Runtime.InteropServices.Marshal.Copy(rgbValues, 0, ptr, bytes); // Unlock the bits. bmp.UnlockBits(bmpData); // Draw the modified image. e.Graphics.DrawImage(bmp, 0, 150); }
- C#的Bitmap.LockBits 使用说明
- Bitmap调用LockBits[C#]
- C# 三个使用LockBits设置图形颜色
- C#中使用lockbits方法处理图像(译文)
- C#中使用lockbits方法处理图像(译文)
- C# 关于readonly的使用说明
- [VB.NET]Bitmap.LockBits在VS2003与VS2005中有什么不同?
- error C2664: 'Gdiplus::Bitmap::LockBits' : cannot convert parameter 1 from 'Gdiplus::Rect *__w64 '
- C# BitMap
- C#中的bitmap类的使用方法
- C# Bitmap类释放资源的方法
- C#中Bitmap类的快速访问
- 关于c#中DateTime::ParseExact的使用说明
- C# string.TrimEnd方法的使用说明
- MongoDb Samus c# Find函数的使用说明
- c#中out ref的简单使用说明
- C# DateTime的 ParseExact和 TryParseExact 使用说明
- Fresco的封装和使用说明以及获取缓存中的Bitmap对象
- Android的常用网络基础
- QQ实现第三方登陆
- 百度富文本编辑器UEditor的使用和他的图片上传
- JavaScript实现选项卡效果
- Slidingmune侧滑
- C#的Bitmap.LockBits 使用说明
- TextView的属性详解
- C语言入门和基本数据类型学习摘要
- 如何提交表单
- HTTP协议使用cookie
- xlistview上拉刷新、下拉加载
- hdu 5686 Problem B【水题】
- OKHttp通信使用(二)
- 定制bootstrap模态框的header