zoukankan      html  css  js  c++  java
  • 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;
            }

        }

    }

  • 相关阅读:
    34组合总和(39)
    33 原子的数量(726)
    32 划分为k个相等的子集(698)
    31有效的井字游戏(794)
    30 设置交集大小至少为2
    28拼接最大数(321)
    js for循环闭包解决循环变量i遍历值
    js 绑定无响应 父元素监听,绑定子元素,事件绑定的几种方法以及区别
    如何让div+css兼容ie6 ie7 ie8 ie9和FireFox Chrome等浏览器
    css实现左侧固定宽,右侧自适应
  • 原文地址:https://www.cnblogs.com/si812cn/p/1229932.html
Copyright © 2011-2022 走看看