(void *)和(byte *) 有区别么?
void* : 类属指针 byte* : (byte ->> typedef unsigned char byte) |
===》C#
Byte[]
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 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并不是得到这个流所存储的内容,而是返回这个流的基础字节数组,可能包括在扩充的时候一些没有使用到的字节。
下面是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;
}
File.WriteAllBytes(fileName, imageData);
If the array contains only raw pixel data, you can create a Bitmap object using the data:
unsafe {
fixed (byte* ptr = imageData) {
using (Bitmap image = new Bitmap(width, height, stride, PixelFormat.Format24bppRgb, new IntPtr(ptr))) {
image.Save(fileName);
}
}
}
Code.google.com.cn
RAW 灰度代码大全。
http://dev.mjxy.cn/a-C-Sharp-RGB-to-Palette-Based-8-bit-Greyscale-Bitmap-Class.aspx
http://www.devsource.com/c/a/Languages/Image-Processing-in-C/
开发源代码:
C:\Windows\twain_32 的Sample包含模拟图片。
本期全力学习C/C++,LINUX。UBUNTU
Adobe Reader 只是阅读器,不能进行转换的操作。但有很多软件可以实现这个功能,Adobe acrobat professional、ScanSoft PDF Professional 以及Foxit PDF editor都可以。