• WPF(C#)中Bitmap与BitmapImage相互转换


    一、WPF的Image控件中设置ImageSource

    image1.Source = new BitmapImage(new Uri(@"image file path", Urikind.RelativeOrAbsolute));

    还可以使用:

    System.IO.FileStream fs = new System.IO.FileStream(filepath, System.IO.FileMode.Open, System.IO.FileAccess.Read);
    
    byte[] buffer = new byte[fs.Length]; fs.Read(buffer, 0, buffer.Length);
    fs.Close(); fs.Dispose();
    System.IO.MemoryStream ms = new System.IO.MemoryStream(buffer);
    BitmapImage bitmapImage = new BitmapImage();
    bitmapImage.BeginInit();
    bitmapImage.StreamSource = ms;
    bitmapImage.CacheOption = BitmapCacheOption.OnLoad; bitmapImage.EndInit();
    ms.Dispose();
    image1.Source = bitmapImage;

    还可以使用:

    BitmapImage bitmapImage = new BitmapImage();
    bitmapImage.BeginInit();
    bitmapImage.CacheOption = BitmapCacheOption.OnLoad;
    bitmapImage.UriSource = new Uri(szPath);//szPath为图片的全路径
    bitmapImage.EndInit();
    bitmapImage.Freeze();
    image1.Source = bitmapImage;

    二、Bitmap转BitmapImage 
    先将Bitmap储存成memorystream,然后指定给BitmapImage

    private BitmapImage BitmapToBitmapImage(System.Drawing.Bitmap bitmap)
    {
    BitmapImage bitmapImage = new BitmapImage();
    using (System.IO.MemoryStream ms = new System.IO.MemoryStream())
    {
      bitmap.Save(ms, bitmap.RawFormat);
      bitmapImage.BeginInit();
      bitmapImage.StreamSource = ms;
      bitmapImage.CacheOption = BitmapCacheOption.OnLoad;
      bitmapImage.EndInit();
      bitmapImage.Freeze();
    }
      return bitmapImage;
    }
    
    image1.Source = BitmapToBitmapImage(bitmap);

    三、Bitmap转BitmapSource

    /*-------------------------------------------------------------------------
    //Imaging.CreateBitmapSourceFromHBitmap方法,基于所提供的非托管位图和调色板信息的指针,
    //返回一个托管的BitmapSource
    ---------------------------------------------------------------------------*/
    Bitmap bitmap = CaptureScreen.GetDesktopImage();
    IntPtr ip = bitmap.GetHbitmap();//从GDI+ Bitmap创建GDI位图对象
    
    BitmapSource bitmapSource = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(ip, IntPtr.Zero, Int32Rect.Empty,
    System.Windows.Media.Imaging.BitmapSizeOptions.FromEmptyOptions());
    
    image1.Source = bitmapSource;

    四、BitmapSource转Bitmap

    BitmapSource m = (BitmapSource)image1.Source;
    
    System.Drawing.Bitmap bmp = new System.Drawing.Bitmap(m.PixelWidth, m.PixelHeight, System.Drawing.Imaging.PixelFormat.Format32bppPArgb); 
    
    System.Drawing.Imaging.BitmapData data = bmp.LockBits(
    new System.Drawing.Rectangle(System.Drawing.Point.Empty, bmp.Size), System.Drawing.Imaging.ImageLockMode.WriteOnly, System.Drawing.Imaging.PixelFormat.Format32bppPArgb); 
    
    m.CopyPixels(Int32Rect.Empty, data.Scan0, data.Height * data.Stride, data.Stride); bmp.UnlockBits(data);
  • 相关阅读:
    Android之Activity启动过程
    Android之Application进阶
    Android之Context进阶
    Thread之ThreadLocal
    Android 系统服务与Binder应用服务
    Android Binder
    Android SystemServer
    Android系统服务与服务注册
    Android Binder进阶扁一
    小米商城-题头3
  • 原文地址:https://www.cnblogs.com/ZaraNet/p/11712341.html
Copyright © 2020-2023  润新知