Bitmap   =>   byte[] 
Bitmap   b   =   new   Bitmap( "test.bmp ");
MemoryStream ms = new MemoryStream();
b.Save(ms,System.Drawing.Imaging.ImageFormat.Bmp);
byte[] bytes= ms.GetBuffer(); //byte[] bytes= ms.ToArray(); 这两句都可以,至于区别么,下面有解释
ms.Close();

byte[]    =>   Bitmap

byte[]   bytelist=bytes;
MemoryStream ms1 = new MemoryStream(bytelist);
Bitmap bm = (Bitmap)Image.FromStream(ms1);
ms1.Close();

1、因为如果不用Bmp的方式转换字节的话,在转换到字节的时候将会丢失数据;

2、MemoryStream的GetBuffer并不是得到这个流所存储的内容,而是返回这个流的基础字节数组,可能包括在扩充的时候一些没有使用到的字节。

 

如果用了MemoryStream,就不能说效果差不多。因为我用java重新开发了MemoryStream这个类,所以象这样的并且应该注意的问题基本上都很清楚,其中GetBuffer就是,有很多人认为用这个方法就是得到写入MemoryStream的字节,其实不是这样的。因为MemoryStream是用byte[]来存储数据,在写入数据的时候就有个扩充的过程,也就是说这个流的长度并不是它的byte[]字段的长度。而GetBuffer返回的就是byte[]这个字段。

下面是GetBuffer的部分实现方法,也许看了这个会更明白:
public   byte[]   GetBuffer()   {
         return   this._buffer;
 }
下面是ToArray的实现方法:
public   byte[]   ToArray()   {
         byte[]   bs   =   new   byte[this._length   -   this._origin];
         for   (int   i   =   this._origin,   j   =   0;   i   <   this._length;   i++)
                 bs[j++]   =   this._buffer[i];
         return   bs;
 }

出处:http://blog.csdn.net/tigertianx/article/details/7098490

C# Bitmap类型与Byte[]类型相互转化的更多相关文章

  1. java里int类型转byte类型

    今天在做书上的一个例子的时候, 要使用byte类型,首先我很直接的就写到了byte b = 0XAA, 结果报错, 说从int转换到byte可能会有损失. 我当时就很奇怪, 为什么会出现这种情况呢? ...

  2. Java类型相互转换byte[]类型,blob类型

    在我们的程序开发当中,经常会用到java.sql.Blob.byte[].InputStream之间的相互转换,但在JDK的API当中,又没有直接给我们提供可用的API,下面的程序片段主要就是实现它们 ...

  3. C#byte类型

    byte类型的范围是0~255转换为二进制是00000000~11111111 ---------------------------------------------------------- C ...

  4. C# 读取 timestamp 时间戳 值为byte[] 类型时转换为时间戳字符串

    C# 中如何读取出来的时间戳为 byte[] 类型的话,用以下方式转换成 16进制字符串 string tmpUfts = "0x"+ BitConverter.ToString( ...

  5. int类型和byte类型的强制类型转换

    今天在读<Java网络编程>这本书的第二章 流 时,看到书中有一个地方关于int强制转换为byte类型时应注意的地方.这个地方有点细节,不过就应该把这种细节把握住. 情况是这样的,讲到In ...

  6. int类型被强制转换成较低精度的byte类型

    公司的项目上线之前会进行代码合规性检查,其中很容易违反的一个规则就是“不要把原始类型转换成较低的精度”,实际开发的过程中,很多方法在处理数据时,尤其在做移位操作的时候,难免要把int类型转换成byte ...

  7. C++开发中BYTE类型数组转为对应的字符串

    下午密码键盘返回了一个校验码,是BYTE类型数组,给上层应用返回最好是字符串方式,怎样原样的将BYTE数组转为string串呢?不多说,开动脑筋上手干!!! BYTE格式的数组bt{08,D7,B4, ...

  8. 详解java中的byte类型

    Java也提供了一个byte数据类型,并且是基本类型.java byte是做为最小的数字来处理的,因此它的值域被定义为-128~127,也就是signed byte.下面这篇文章主要给大家介绍了关于j ...

  9. go语言byte类型报错cannot use "c" (type string) as type byte in assignment

    练习Go修改字符串的时候遇到这个问题:cannot use "c" (type string) as type byte in assignment,代码如下: package m ...

随机推荐

  1. WINDOWS的NTP配置

    将下面内容复制到记事本,保存成ntp.bat net stop w32Time REG ADD HKLM\SYSTEM\CurrentControlSet\Services\W32Time\TimeP ...

  2. 为什么for(int i=0;i<9;i++) 在c语言中是错误的?

    显示表示,i 变量不可以在for中定义,必须在外面定义,这是为什么? 因为C99标准以前的C标准是不支持临时变量在for循环中定义的. C99标准就支持这样写.但是目前有些编译器并不怎么愿意支持C99 ...

  3. MySQL的binlog数据如何查看

    binlog介绍 binlog,即二进制日志,它记录了数据库上的所有改变. 改变数据库的SQL语句执行结束时,将在binlog的末尾写入一条记录,同时通知语句解析器,语句执行完毕. binlog格式 ...

  4. php get_magic_quotes_gpc()函数

    magic_quotes_gpc函数在php中的作用是判断解析用户提示的数据,如包括有:post.get.cookie过来的数据增加转义字符“\”,以确保这些数据不会引起程序,特别是数据库语句因为特殊 ...

  5. SQlserver 行转列

    列转行编程中很容易碰到,小弟在此总结下, 行转列暂时还没遇到,遇到再补充. 列转行:  , , , ,  以上都是以逗号分隔,分隔符可以自定义.

  6. iOS遍历程序内某个文件夹下所有文件的属性

    项目中有个文件管理系统,在做本地文件管理操作的时候,遇到了遍历本地文件的问题 遍历到的文件有些不需要显示,而且需要得到文件的相关属性,在此总结下. //查找需要遍历文件夹的目录 NSString *k ...

  7. .net web获取自己的ip地址

    using System;using System.Text;using System.Web;using System.Text.RegularExpressions; namespace MxWe ...

  8. apache的80端口分发

    打开 conf 文件夹,找到下面的 httpd.conf 更改Listen 后面的端口号为:80:默认就是80端口 去掉下面的相关注释: #LoadModule proxy_module module ...

  9. JS-字符串操作,查找显示高亮

    <!DOCTYPE HTML><html><head><meta http-equiv="Content-Type" content=&q ...

  10. webdriver 获取元素焦点方法

    --------------------------------------- http://www.ltesting.net/ceshi/open/kygncsgj/selenium/2013/01 ...