[C#绘图]Bitmap锁定到系统内存中

具体方法Bitmap.LockBits方法的实现功能是讲Bitmap锁定到系统内存中。

使用LockBits方法,可以在系统内存中锁定现有的位图,以便通过编程方式进行修改。尽管用LockBits方式进行大规模更改可以获得更好的性能,但是仍然可以用SetPixel方法来更改图像的颜色。

函数的返回值的类型是BitmapData,包含选定Bitmap区域的特性。

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);

}
时间: 2024-10-13 22:07:13

[C#绘图]Bitmap锁定到系统内存中的相关文章

iOS之在内存中绘图

与直接在UIView控件上绘图不同,在内存中绘图时,需要开发者自己准备绘图环境,Quartz 2D提供了一个非常便捷的函数:UIGraphicsBeginImageContext(CGSize size),该函数用于准备绘图环境.当图形绘制完成后,可调用UIGraphicsEndImageContext()函数结束绘图和关闭绘图环境. 总结来说,在内存中绘图的步骤如下. 调用UIGraphicsBeginImageContext(CGSize size)函数准备绘图环境. 调用UIGraphic

Linux内存中的Cache真的能被回收么?

Linux内存中的Cache真的能被回收么? ![Recycle] (http://sc.websbook.com/sc/upimg/allimg/090228/014_1600_websbook_com.jpg) 在Linux系统中,我们经常用free命令来查看系统内存的使用状态.在一个RHEL6的系统上,free命令的显示内容大概是这样一个状态: [[email protected] ~]# free             total       used       free     s

浅谈Linux 内存中的Cache: buffers 与 cached

Linux 内存中的Cache,真的能被回收么? 您真的了解Linux的free命令么? 在Linux系统中,我们经常用free命令来查看系统内存的使用状态.在一个RHEL6的系统上,free命令的显示内容大概是这样一个状态: 这里的默认显示单位是kb,我的服务器是128G内存,所以数字显得比较大.这个命令几乎是每一个使用过Linux的人必会的命令,但越是这样的命令,似乎真正明白的人越少(我是说比例越少). 一般情况下,对此命令输出的理解可以分这几个层次: 不了解.这样的人的第一反应是:天啊,内

Linux 内存中的Cache,真的能被回收么?

您真的了解Linux的free命令么? 在Linux系统中,我们经常用free命令来查看系统内存的使用状态.在一个RHEL6的系统上,free命令的显示内容大概是这样一个状态: 这里的默认显示单位是kb,我的服务器是128G内存,所以数字显得比较大.这个命令几乎是每一个使用过Linux的人必会的命令,但越是这样的命令,似乎真正明白的人越少(我是说比例越少). 一般情况下,对此命令输出的理解可以分这几个层次: 不了解.这样的人的第一反应是:天啊,内存用了好多,70个多G,可是我几乎没有运行什么大程

【Java编码准则】の #01限制内存中敏感数据的生命周期

当竞争对手的应用程序与我们的应用程序执行在同一个系统上时,我们的应用程序在内存中的敏感数据是非常easy被竞争对手获取的.假设我们的应用程序符合以下几种情况之中的一个,那么竞争对手能够获取到我们应用的敏感数据: 1)应用程序使用对象来存储敏感数据,并且在对象使用完后.对象的内容没有被清除或者对象没有被垃圾回收: 2)在操作系统执行内存管理任务或者执行休眠等功能时.应用程序的内存分页将被置换到磁盘上保存: 3)持有存储了操作系统缓存或者内存中敏感数据的buffer对象(比如BufferedRead

Linux内存中的Cache真的能被回收吗? 【转】

在Linux系统中,我们经常用free命令来查看系统内存的使用状态.在一个RHEL6的系统上,free命令的显示内容大概是这样一个状态: [[email protected] ~]# free             total       used       free     shared    buffers     cachedMem:     132256952   72571772   59685180          0    1762632   53034704-/+ buff

D3D中的AGP内存、系统内存、显存的理解

转自 http://www.cnblogs.com/lancidie/archive/2011/05/20/2052094.html 学习D3D,应该对这三个内存理解,网上收集了一下相关资料,收藏下来. 三种内存AGP内存(非本地显存),显存(本地内存),系统内存,其中我们都知道系统内存就是咱那内存条,那这AGP内存是个啥玩意啊?其实是因为在以前显卡内存都很小,那时还是在显存是16M,32M为主流的时候,如果你运行一个需要很多纹理的3D程序,那么显存一会就不够用了,那该咋办呢?只好问系统内存借点

centos 6.5 清除内存中的系统缓存

centos 6.5 清除内存中的系统缓存 # free -m total       used       free     shared    buffers     cached Mem:         15936       7313       8623          0          3         90 -/+ buffers/cache:       7219       8716 Swap:         8194          7       8187 使

C#语言(第一部分:内存中的系统)

C#语言: 1.基本常用的类别 Main : 程序的入口点; Console : 控制台; Console.WriteLine :把双引号内的文本内容输出到控制台; Console.ReadLine:从控制台读取一行; string : 字符串; && : 并且 || :或者 (或:同假为假; 并:同真为真;异或:相异为真) if : 如果 elas : 否则 function : 函数 return : 返回 public : 公有的 private : 私有的(默认值) void :