但是不知道为什么用位图转成的字节却不能被方法Image.FromStream读取,但可以被Bitmap.FromStream读取。
using System;
using System.Collections.Generic;
using System.Collections;
using System.Text;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
namespace Sicnco.Utility
{
public class SuperImage
{
public SuperImage()
{
}
private static Bitmap ConvertToRgb(Image pOrgImage)
{
Bitmap vOrgBmp = new Bitmap(pOrgImage);
//if (vOrgBmp.Width > vOrgBmp.Height)
//{
// vOrgBmp.RotateFlip(RotateFlipType.Rotate90FlipNone);
//}
Bitmap vTemp = new Bitmap(480, 640, PixelFormat.Format24bppRgb);
//vTemp.SetResolution(600f, 600f);
Graphics vGrap = Graphics.FromImage(vTemp);
vGrap.DrawImage(vOrgBmp, new Rectangle(0, 0, 480, 640), 0, 0, vOrgBmp.Width, vOrgBmp.Height, GraphicsUnit.Pixel);
vGrap.Save();
return vTemp;
}
public static Bitmap ConvertToBmp(byte[] pDatas)
{
Bitmap bmp = new Bitmap(480, 640);
BitmapData bData = bmp.LockBits(new Rectangle(new Point(), bmp.Size),
ImageLockMode.WriteOnly,
PixelFormat.Format24bppRgb);
// Copy the bytes to the bitmap object
System.Runtime.InteropServices.Marshal.Copy(pDatas, 0, bData.Scan0, pDatas.Length);
bmp.UnlockBits(bData);
return bmp;
}
//public static Bitmap ConvertToBmp(byte[] pDatas)
//{
// MemoryStream vStream = new MemoryStream(pDatas);
// Bitmap vBmp = Bitmap.FromStream(vStream);
// vStream.Close();
// vStream = null;
// return vBmp;
//}
public static byte[] ConvertToBytes(Image pOrgImage)
{
Bitmap vBmp = ConvertToRgb(pOrgImage);
BitmapData vBmpData = vBmp.LockBits(new Rectangle(0, 0, vBmp.Width, vBmp.Height), ImageLockMode.ReadOnly, PixelFormat.Format24bppRgb);
IntPtr vPtr = vBmpData.Scan0;
int vBytes = vBmpData.Stride * vBmp.Height;
byte[] vDatas = new byte[vBytes];
System.Runtime.InteropServices.Marshal.Copy(vPtr, vDatas, 0, vBytes);
vBmp.UnlockBits(vBmpData);
return vDatas;
}
//public static byte[] ConvertToBytes(Image pOrgImage)
//{
// Bitmap vBmp = ConvertToRgb(pOrgImage);
// MemoryStream vStream = new MemoryStream();
// vBmp.Save(vStream, ImageFormat.Jpeg);
// byte[] vBytes = vStream.GetBuffer();
// vBmp.Dispose();
// vStream.Close();
// vStream = null;
// return vBytes;
//}
private static ImageCodecInfo GetEncoderInfo(string mimeType)
{
int j;
ImageCodecInfo[] encoders;
encoders = ImageCodecInfo.GetImageEncoders();
for (j = 0; j < encoders.Length; ++j)
{
if (encoders[j].MimeType == mimeType)
return encoders[j];
}
return null;
}
}
}
using System.Collections.Generic;
using System.Collections;
using System.Text;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
namespace Sicnco.Utility
{
public class SuperImage
{
public SuperImage()
{
}
private static Bitmap ConvertToRgb(Image pOrgImage)
{
Bitmap vOrgBmp = new Bitmap(pOrgImage);
//if (vOrgBmp.Width > vOrgBmp.Height)
//{
// vOrgBmp.RotateFlip(RotateFlipType.Rotate90FlipNone);
//}
Bitmap vTemp = new Bitmap(480, 640, PixelFormat.Format24bppRgb);
//vTemp.SetResolution(600f, 600f);
Graphics vGrap = Graphics.FromImage(vTemp);
vGrap.DrawImage(vOrgBmp, new Rectangle(0, 0, 480, 640), 0, 0, vOrgBmp.Width, vOrgBmp.Height, GraphicsUnit.Pixel);
vGrap.Save();
return vTemp;
}
public static Bitmap ConvertToBmp(byte[] pDatas)
{
Bitmap bmp = new Bitmap(480, 640);
BitmapData bData = bmp.LockBits(new Rectangle(new Point(), bmp.Size),
ImageLockMode.WriteOnly,
PixelFormat.Format24bppRgb);
// Copy the bytes to the bitmap object
System.Runtime.InteropServices.Marshal.Copy(pDatas, 0, bData.Scan0, pDatas.Length);
bmp.UnlockBits(bData);
return bmp;
}
//public static Bitmap ConvertToBmp(byte[] pDatas)
//{
// MemoryStream vStream = new MemoryStream(pDatas);
// Bitmap vBmp = Bitmap.FromStream(vStream);
// vStream.Close();
// vStream = null;
// return vBmp;
//}
public static byte[] ConvertToBytes(Image pOrgImage)
{
Bitmap vBmp = ConvertToRgb(pOrgImage);
BitmapData vBmpData = vBmp.LockBits(new Rectangle(0, 0, vBmp.Width, vBmp.Height), ImageLockMode.ReadOnly, PixelFormat.Format24bppRgb);
IntPtr vPtr = vBmpData.Scan0;
int vBytes = vBmpData.Stride * vBmp.Height;
byte[] vDatas = new byte[vBytes];
System.Runtime.InteropServices.Marshal.Copy(vPtr, vDatas, 0, vBytes);
vBmp.UnlockBits(vBmpData);
return vDatas;
}
//public static byte[] ConvertToBytes(Image pOrgImage)
//{
// Bitmap vBmp = ConvertToRgb(pOrgImage);
// MemoryStream vStream = new MemoryStream();
// vBmp.Save(vStream, ImageFormat.Jpeg);
// byte[] vBytes = vStream.GetBuffer();
// vBmp.Dispose();
// vStream.Close();
// vStream = null;
// return vBytes;
//}
private static ImageCodecInfo GetEncoderInfo(string mimeType)
{
int j;
ImageCodecInfo[] encoders;
encoders = ImageCodecInfo.GetImageEncoders();
for (j = 0; j < encoders.Length; ++j)
{
if (encoders[j].MimeType == mimeType)
return encoders[j];
}
return null;
}
}
}