[C#编程参考]把图像转换为数组的两种实现
当一个程序和一个图片放在一起,无非有两种操作:
第一种,就是传输这个图片,在传输图片之前要首先把这个图片变成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#编程参考]把图像转换为数组的两种实现的更多相关文章
- python将两个数组合并成一个数组的两种方法的代码
内容过程中,把写内容过程中常用的内容收藏起来,下面的资料是关于python将两个数组合并成一个数组的两种方法的内容,希望能对小伙伴们有帮助. c1 = ["Red","G ...
- js中将类数组转换为数组的几种方法
1.slice方法 最经典的方法,使用Array的slice方法,此方法如果不传参数的话会返回原数组的一个拷贝,因此可以用此方法转换类数组到数组: // 创建一个类数组对象 var alo = {0: ...
- python数字转换为字符串的两种方式
主要包括两种形式进行转换: 第一种是str(),将值转换为用户便于阅读的形式: 另一种是repr(),将值转换为合法的python表达式. >>> print repr(" ...
- C++函数传递数组的两种方式
数组与指针. 传首地址过去,然后通过地址输出数组元素. 1.一维数组 #include<iostream> using namespace std; #include <cstrin ...
- Python -- 值转换为字符串的两种机制
可以通过以下两个函数来使用这两种机制:一是通过str函数,它会把值转换为合理形式的字符串,以便用户可以理解:而repr会创建一个字符串,它以合法的Python表达式的形式来表示值.下面是一些例子: & ...
- C++&OpenCV中读取灰度图像到数组的两种
如标题所言,此处是对于灰度图像而言 ///method 1 read the image data one by one for (int row = 0, i = 0;row < imgDst ...
- C51编程中对单片机绝对地址访问的两种方法
在进行8051单片机应用系统程序设计时,编程都往往少不了要直接操作系统的各个存储器地址空间.C51程序经过编译之后产生的目标代码具有浮动地址,其绝对地址必须经过BL51连接定位后才能确定.为了能够在C ...
- nodejs 遍历数组的两种方法
var array = [1,2,3]; array.forEach(function(v,i,a){ console.log(v); console.log(i); console.log(a); ...
- python遍历数组的两种方法
第一种,最常用的,通过for in遍历数组 1 2 3 4 5 6 7 8 colours = ["red","green","blue"] ...
随机推荐
- C++中顶层const和底层const
1. 顶层 const 与底层 const 概念 指针本身是一个对象,由于,指针实际相应着内存单元的一段存储空间,然而,指针所指向的也是一个数据对象,因此,指针是一个常量与指针所指向的是一个常量是两个 ...
- spring NotWritablePropertyException异常
Caused by: org.springframework.beans.NotWritablePropertyException: Invalid property 'userDao' of bea ...
- 从零开始学习UNITY3D(GUI篇 GUI.Window)
unity3d里面,也是包含window窗体的,下面看一下GUI.Window方法的详情 下面我们用代码实现一个通过开关显示窗体的隐藏和显示的功能,代码如下: public class windows ...
- You raise me up
You raise me up, so I can stand on mountains;You raise me up, to walk on stormy seas;I am strong, wh ...
- U盘安装CentOS6.x报错:Missing ISO 9660 Image
以前都是DVD安装CentOS,这次因为装固态硬盘,然后把光驱给卸载了.所以就尝试用U盘引导安装CentOS,结果安装时竟然出现了Missing ISO 9660 Image的错误. 解决方案: 将C ...
- ##DAY9 UITabBarController
##DAY9 UITabBarController UIViewController的tabBarController UIViewController的tabBarItem #pragma mark ...
- Convert Sorted Array to Balanced Binary Search Tree (BST)
(http://leetcode.com/2010/11/convert-sorted-array-into-balanced.html) Given an array where elements ...
- Material Design 开发利器:Android Design Support Library 介绍
转自:https://blog.leancloud.cn/3306/ Android 5.0 Lollipop 是迄今为止最重大的一次发布,很大程度上是因为 material design —— 这是 ...
- eclipse更改主题
长期使用eclipse,导致视觉疲劳,就想着能否换个主题调节调节. 通过设置window>preferences>appearance设置theme,貌似不起作用. 一查,发现一个绝佳的网 ...
- JS表格排序
var employees = [] employees[0] = { name: "George", age: 32, retiredate: "March 12, 2 ...