当一个程序和一个图片放在一起,无非有两种操作:

第一种,就是传输这个图片,在传输图片之前要首先把这个图片变成byte类型的数组。所以这时候我们用到的是图片的存储的数据,也就是图片属性中的大小。我们并不关心这个图片的像素矩阵信息。因为图片在存储的时候都是经过各种压缩的,所以我只需要把这个压缩的数据读取到内存,通过网络或者其他方式把它传送给接收方,然后接收方在把byte转换成图片,存储在硬盘上。在整个的过程中,我们不关心任何有关图片内部矩阵的信息,整个过程都保持图片的压缩的样式。

在传输的具体实现就是把图像Save到相应的Stream流,如文件流或者网络流。

详细链接:

[C#参考]byte数组和Image的相互转换

第二种,就是我们要操作图像的像素矩阵,这时候我们读入内存的图像就不能使压缩的图像了,要把压缩在硬盘上的图像恢复成原来的像素矩阵的形式,加载到内存中,然后转换成byte数组,对其做相应的处理。

实现的方法就是利用Bitmap实例对象的LockBits方法在自己的像素矩阵中锁定一个矩形区域,然后把锁定区域的像素加载到内存的BitmapData对象中。这时的BitmapData就只是锁定区域的像素信息,没有其他的说明信息或者压缩的信息。然后再对这个BitmapData对象操作,比如转换成byte数组,然后修改byte数组中的值,达到修改像素的作用。

同一个BitmapData对象可能被多个Bitmap对象持有,那么一旦BitmapData改变,所有的Bitmap对象都将受到影响,为了避免这种情况,可以用BitmapData对象提供的clone()方法生成当前BitmapData对象的拷贝。这种BitmapData和Bitmap的形式,在C++ OpenCV中很容易产生访问的限制,容易对同一个BitmapData释放两次。

详细链接:

[C#参考]BitmapData类

[C#编程参考]把图像转换为数组的两种实现的更多相关文章

  1. python将两个数组合并成一个数组的两种方法的代码

    内容过程中,把写内容过程中常用的内容收藏起来,下面的资料是关于python将两个数组合并成一个数组的两种方法的内容,希望能对小伙伴们有帮助. c1 = ["Red","G ...

  2. js中将类数组转换为数组的几种方法

    1.slice方法 最经典的方法,使用Array的slice方法,此方法如果不传参数的话会返回原数组的一个拷贝,因此可以用此方法转换类数组到数组: // 创建一个类数组对象 var alo = {0: ...

  3. python数字转换为字符串的两种方式

    主要包括两种形式进行转换: 第一种是str(),将值转换为用户便于阅读的形式: 另一种是repr(),将值转换为合法的python表达式. >>> print repr(" ...

  4. C++函数传递数组的两种方式

    数组与指针. 传首地址过去,然后通过地址输出数组元素. 1.一维数组 #include<iostream> using namespace std; #include <cstrin ...

  5. Python -- 值转换为字符串的两种机制

    可以通过以下两个函数来使用这两种机制:一是通过str函数,它会把值转换为合理形式的字符串,以便用户可以理解:而repr会创建一个字符串,它以合法的Python表达式的形式来表示值.下面是一些例子: & ...

  6. C++&OpenCV中读取灰度图像到数组的两种

    如标题所言,此处是对于灰度图像而言 ///method 1 read the image data one by one for (int row = 0, i = 0;row < imgDst ...

  7. C51编程中对单片机绝对地址访问的两种方法

    在进行8051单片机应用系统程序设计时,编程都往往少不了要直接操作系统的各个存储器地址空间.C51程序经过编译之后产生的目标代码具有浮动地址,其绝对地址必须经过BL51连接定位后才能确定.为了能够在C ...

  8. nodejs 遍历数组的两种方法

    var array = [1,2,3]; array.forEach(function(v,i,a){ console.log(v); console.log(i); console.log(a); ...

  9. python遍历数组的两种方法

    第一种,最常用的,通过for in遍历数组 1 2 3 4 5 6 7 8 colours = ["red","green","blue"] ...

随机推荐

  1. java.util.zip.GZIPInputStream.readUByte,Not in GZIP format错误处理

    问题一: 使用webclient抓取网页时报错:(GZIPInputStream.java:207) atjava.util.zip.GZIPInputStream.readUShort(GZIPIn ...

  2. cdoj 斐波那契进制

    //昨天在姜神的提醒下发现这种方法可以解决升级版的 非升级版直接01背包就好 //这题脑洞开得真是够大 解:大概要先把数分解成斐波拉契进制,x=f1*(0或1)+f2*(0或1)+...+fn*(0或 ...

  3. org/apache/commons/pool/impl/GenericObjectPool异常的解决办法

    org/apache/commons/pool/impl/GenericObjectPool异常的解决办法 webwork+spring+hibernate框架的集成, 一启动Tomcat服务器就出了 ...

  4. express中路由设置的坑-----1

    router.get('/commodities/sortable', utils.logged, function (req, res) { Commodity.find({force_top:tr ...

  5. iOS 退出应用程序

    退出应用程序,方法很简单,只是动画效果没有那么好. - (void)exitApplication { AppDelegate *app = [UIApplication sharedApplicat ...

  6. java中的上传下载----ajaxFileUpload+struts2

    文件上传在项目中应该是非常常见的,而且很多时候,上传文件都只是一个小页面中的一个功能,要求在实现文件上传的前提下不刷新页面.而一般情况下将客户端的文件包装成网络地址传递到服务器端然后通过流来进行文件传 ...

  7. 列表的实现-----数据结构与算法JavaScript描述 第三章

    实现一个列表 script var booklist = new List(); booklist.append('jsbook'); booklist.append('cssbook'); book ...

  8. JavaScript之面向对象学习三原型语法升级

    1.到目前为止,我们是时候分析下前面的使用原型语法来定义对象有哪些不足的地方,代码如下: function Person(){ } Person.prototype.name="张三&quo ...

  9. 保护眼睛,绿豆沙颜色的RGB值和HSL值

    现在的人尤其是职场中人,每天都得花很长时间对着电脑,对眼睛的伤害很大,其实我们可以对电脑进行一个简单的设置,把窗口背景设置成绿豆沙颜色的,对眼睛的保护很有帮助的. 下面是绿豆沙颜色的RGB值和HSL值 ...

  10. VC MFC 屏蔽ESC和ENTER键关闭对话框

    方法一: 窗体头文件中加入: protected: virtual BOOL PreTranslateMessage(MSG* pMsg); // PreTranslateMessage是消息在送给T ...