bytetobmp and bmptobyte(Image)

有很多种方法处理字节到位图以及位图处理到字节。
但是不知道为什么用位图转成的字节却不能被方法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(480640, PixelFormat.Format24bppRgb);
            
//vTemp.SetResolution(600f, 600f);

            Graphics vGrap 
= Graphics.FromImage(vTemp);

            vGrap.DrawImage(vOrgBmp, 
new Rectangle(00480640), 00, vOrgBmp.Width, vOrgBmp.Height, GraphicsUnit.Pixel);

            vGrap.Save();

            
return vTemp;
        }


        
public static Bitmap ConvertToBmp(byte[] pDatas)
        
{
            Bitmap bmp 
= new Bitmap(480640);

            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(00, 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;
        }

    }

}

原文地址:https://www.cnblogs.com/si812cn/p/1229932.html