测试Bitmap和Marshal.Copy
#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相关推荐
- C#调用C++ memcpy实现各种参数类型的内存拷贝 VS marshal.copy的实现 效率对比
C#调用C++ memcpy实现各种参数类型的内存拷贝 VS marshal.copy的实现 效率对比 using System; using System.Runtime.InteropServic ...
- Marshal.Copy 之 startIndex 参数的含义
Marshal.Copy 可以将 Array 中的数据拷贝给 IntPtr 所指向的地址,也可以将 IntPtr 地址中的内容拷贝给 Array. 不管是从哪里拷贝到哪里,其中都有一个参数 start ...
- 使用Marshal.Copy把Txt行数据转为Struct类型值
添加重要的命名空间: using System.Runtime.InteropServices; 先建立结构相同(char长度相同)的Struct类型用于转换: [StructLayout(Layou ...
- 已有生成随机数函数生成扩展_如何创建没有副作用的随机数生成器函数
已有生成随机数函数生成扩展 Must you be thinking about this title? Is that even possible? The random generator has ...
- byte[] 转成 bitmap
这段时间公司有个项目需要用到指纹识别,指纹识别硬件这个提供了一个DLL,DLL有个API 叫 mxUsbGetImage, 当手指头读取指纹的时候,实际上将指纹机的得到的 mxUsgGetIm ...
- C# 中Bitmap图像处理含增强对比度的三种方法
Bitmap类 Bitmap对象封装了GDI+中的一个位图,此位图由图形图像及其属性的像素数据组成.因此Bitmap是用于处理由像素数据定义的图像的对象.该类的主要方法和属性如下: 1. GetPix ...
- HImage转换为Bitmap的终极解决方案(C#)彩色三通道图像
HImage转换为Bitmap的终极解决方案(C#)彩色三通道图像 时隔一年多,终于把这个问题解决掉了.现在回头看,这个问题其实并不复杂,当初处理不了,完全是因为缺乏经验,多看多写,可能就会在处理其他 ...
- C#图片灰度处理(位深度24→位深度8),用灰度数组byte[]新建一个8位灰度图像Bitmap 。...
原文:C#图片灰度处理(位深度24→位深度8) #region 灰度处理/// <summary>/// 将源图像灰度化,并转化为8位灰度图像./// </summary>// ...
- C# - Marshal 学习总结
C#--Marshal.StructureToPtr方法简介 http://blog.csdn.net/livelylittlefish/article/details/2423764 ...
最新文章
- linux文件属性文文件类型知识
- webstorm 修改端口号
- python简单编程例子-Python入门 —— 用pycharm写一个简单的小程序3
- 使用mac 终端利用alias设置快捷命令
- R.java文件介绍
- 设计模式-----单例模式优缺点及使用场景
- KClient——kafka消息中间件源码解读
- JDK core dump分析
- HarmonyOS之数据管理·关系型数据库的应用
- 关于.c和.h 和定义变量的问题
- lintcode 最长上升连续子序列 II(二维最长上升连续序列)
- android preferenceactivity 源码,PreferenceActivity PreferenceScreen (3.0/API 11 以前)
- java 0xf0_java 中类似js encodeURIComponent 函数的实现案例
- linux page buffer cache深入理解
- Java中.setvalue(-1)_Java State.setValue方法代碼示例
- Stubs和Mocks区别 (Stubs vs. Mocks)
- SQL 筛选某一时间大于某一个值的数据及数量
- b250支持服务器cpu,b250m主板上什么cpu
- 应届生软件测试面经_应届生如何快速通过软件测试面试?
- 基于proteus的计数器设计
热门文章
- 幸福森林的闲人日记系列之---抢肉记(超长篇+分享版)-------记2011年8月13日
- 用html浮雕效果图,怎么利用css实现浮雕效果
- Linux内核省电社区,【整理】Linux禁用CPU省电状态/Linux系统性能调优 | 勤奋的小青蛙...
- 赣州电子计算机学校学费,赣州应用技术职业学校2021年学费、收费多少
- windows资源管理器进程关闭了,如何恢复
- 怎么编辑被保护的word文件
- six.moves的用法
- 重庆学东北大学计算机研究生,东北大学和重庆大学,都是985高校,综合比较哪个实力更强?...
- 关于C#下使用轻量级数据库的一些经验
- Tnsping 和TCP/IP 中的ping 的区別