#region 测试Bitmap和Marshal.Copypublic static void TestBitmapAndMarshalCopy(){//测试Bitmap和Marshal.CopyBitmap bitmap1 = new Bitmap("./123456.jpg");Rectangle rectangle = new Rectangle(0, 0, bitmap1.Width, bitmap1.Height);//锁定bitmap到系统内存System.Drawing.Imaging.BitmapData bitmapData = bitmap1.LockBits(rectangle, System.Drawing.Imaging.ImageLockMode.ReadWrite, bitmap1.PixelFormat);//BitmapData 指定 Bitmap 的特性,如大小、像素格式、像素数据在内存中的起始地址以及每个扫描行的长度(步幅)。var pixel = bitmapData.PixelFormat; //Bitmap 的特性 宽度var Width = bitmapData.Width;//Bitmap 的特性 宽度var Height = bitmapData.Height; //Bitmap 的特性 高度var firstStartAddress = bitmapData.Scan0;//像素数据在内存中的起始地址var Stride = bitmapData.Stride;//像素数据在内存中的每个扫描行的长度(步幅)var leength = Math.Abs(bitmapData.Stride) * bitmapData.Height;byte[] bts = new byte[leength];// 将数据从非托管内存指针复制到托管 8 位无符号整数数组System.Runtime.InteropServices.Marshal.Copy(firstStartAddress, bts, 0, bts.Length);//使rgb图片变红色for (int i = 2; i < bts.Length; i += 3){bts[i] = 255;}//将数据从一维托管 8 位无符号整数数组复制到非托管内存指针。System.Runtime.InteropServices.Marshal.Copy(bts, 0, firstStartAddress, bts.Length);bitmap1.UnlockBits(bitmapData);bitmap1.Save("./123456new.jpg", System.Drawing.Imaging.ImageFormat.Jpeg);bitmap1.Dispose();//测试托管内存到非托管内存string a = "123456";IntPtr dd = System.Runtime.InteropServices.Marshal.AllocHGlobal(10);char[] chars = a.ToCharArray();// 将数据从一维托管字符数组复制到非托管内存指针。System.Runtime.InteropServices.Marshal.Copy(chars, 0, dd, chars.Length);//修改//char[] chars1 = new char[chars.Length];//将数据从非托管内存指针复制到托管字符数组。System.Runtime.InteropServices.Marshal.Copy(dd, chars1, 0, chars.Length);System.Runtime.InteropServices.Marshal.FreeHGlobal(dd);}#endregion

测试Bitmap和Marshal.Copy相关推荐

  1. C#调用C++ memcpy实现各种参数类型的内存拷贝 VS marshal.copy的实现 效率对比

    C#调用C++ memcpy实现各种参数类型的内存拷贝 VS marshal.copy的实现 效率对比 using System; using System.Runtime.InteropServic ...

  2. Marshal.Copy 之 startIndex 参数的含义

    Marshal.Copy 可以将 Array 中的数据拷贝给 IntPtr 所指向的地址,也可以将 IntPtr 地址中的内容拷贝给 Array. 不管是从哪里拷贝到哪里,其中都有一个参数 start ...

  3. 使用Marshal.Copy把Txt行数据转为Struct类型值

    添加重要的命名空间: using System.Runtime.InteropServices; 先建立结构相同(char长度相同)的Struct类型用于转换: [StructLayout(Layou ...

  4. 已有生成随机数函数生成扩展_如何创建没有副作用的随机数生成器函数

    已有生成随机数函数生成扩展 Must you be thinking about this title? Is that even possible? The random generator has ...

  5. byte[] 转成 bitmap

    这段时间公司有个项目需要用到指纹识别,指纹识别硬件这个提供了一个DLL,DLL有个API 叫 mxUsbGetImage, 当手指头读取指纹的时候,实际上将指纹机的得到的 mxUsgGetIm ...

  6. C# 中Bitmap图像处理含增强对比度的三种方法

    Bitmap类 Bitmap对象封装了GDI+中的一个位图,此位图由图形图像及其属性的像素数据组成.因此Bitmap是用于处理由像素数据定义的图像的对象.该类的主要方法和属性如下: 1. GetPix ...

  7. HImage转换为Bitmap的终极解决方案(C#)彩色三通道图像

    HImage转换为Bitmap的终极解决方案(C#)彩色三通道图像 时隔一年多,终于把这个问题解决掉了.现在回头看,这个问题其实并不复杂,当初处理不了,完全是因为缺乏经验,多看多写,可能就会在处理其他 ...

  8. C#图片灰度处理(位深度24→位深度8),用灰度数组byte[]新建一个8位灰度图像Bitmap 。...

    原文:C#图片灰度处理(位深度24→位深度8) #region 灰度处理/// <summary>/// 将源图像灰度化,并转化为8位灰度图像./// </summary>// ...

  9. C# - Marshal 学习总结

    C#--Marshal.StructureToPtr方法简介 http://blog.csdn.net/livelylittlefish/article/details/2423764         ...

最新文章

  1. linux文件属性文文件类型知识
  2. webstorm 修改端口号
  3. python简单编程例子-Python入门 —— 用pycharm写一个简单的小程序3
  4. 使用mac 终端利用alias设置快捷命令
  5. R.java文件介绍
  6. 设计模式-----单例模式优缺点及使用场景
  7. KClient——kafka消息中间件源码解读
  8. JDK core dump分析
  9. HarmonyOS之数据管理·关系型数据库的应用
  10. 关于.c和.h 和定义变量的问题
  11. lintcode 最长上升连续子序列 II(二维最长上升连续序列)
  12. android preferenceactivity 源码,PreferenceActivity PreferenceScreen (3.0/API 11 以前)
  13. java 0xf0_java 中类似js encodeURIComponent 函数的实现案例
  14. linux page buffer cache深入理解
  15. Java中.setvalue(-1)_Java State.setValue方法代碼示例
  16. Stubs和Mocks区别 (Stubs vs. Mocks)
  17. SQL 筛选某一时间大于某一个值的数据及数量
  18. b250支持服务器cpu,b250m主板上什么cpu
  19. 应届生软件测试面经_应届生如何快速通过软件测试面试?
  20. 基于proteus的计数器设计

热门文章

  1. 幸福森林的闲人日记系列之---抢肉记(超长篇+分享版)-------记2011年8月13日
  2. 用html浮雕效果图,怎么利用css实现浮雕效果
  3. Linux内核省电社区,【整理】Linux禁用CPU省电状态/Linux系统性能调优 | 勤奋的小青蛙...
  4. 赣州电子计算机学校学费,赣州应用技术职业学校2021年学费、收费多少
  5. windows资源管理器进程关闭了,如何恢复
  6. 怎么编辑被保护的word文件
  7. six.moves的用法
  8. 重庆学东北大学计算机研究生,东北大学和重庆大学,都是985高校,综合比较哪个实力更强?...
  9. 关于C#下使用轻量级数据库的一些经验
  10. Tnsping 和TCP/IP 中的ping 的区別