为什么从 byte[] 创建 System.Drawing.Bitmap - 然后将位图存储在 Avalonia.Media.Imaging.Bitmap 中 - 导致黑色图像?

问题描述 投票:0回答:1

我正在使用 this 线程中的一些代码将 byte[] 数据存储为 System.Drawing.Bitmap,然后将其存储为 Avalonia.Media.Imaging.Bitmap。在我的 avalonia 应用程序的图像控件中使用此 Avalonia 位图仅显示黑色图像。

    private System.Drawing.Bitmap? _regularBitmap = new (1920, 1080, PixelFormat.Format16bppRgb565);

    public void DecodeAndUpdateBitmap(byte[] imageData)
    {
        using (MemoryStream ms = new MemoryStream(imageData))
        {
            _regularBitmap.Save(ms, ImageFormat.Jpeg);
            ms.Position = 0;

            _tempImage = new Avalonia.Media.Imaging.Bitmap(ms);
        }
    }

作为方法参数传入的byte[],用于内存流,里面肯定存储有数据,如下图所示。

所以我的猜测是,我创建 System.Drawing.Bitmap 用作 Avalonia.Media.Imaging.Bitmap 的方式导致了这个问题。

有谁知道更好的方法来实现我想要实现的目标,或者知道是什么导致了这个问题?

image data-conversion avaloniaui
1个回答
0
投票

尝试使用 WriteableBitmap

var bitmap = new WriteableBitmap( 
  new PixelSize(1920, 1080), 
  new Vector(96, 96), 
  PixelFormat.Bgra8888, 
  AlphaFormat.Premul); 
  
using (var frameBuffer = bitmap.Lock()) 
{ 
  Marshal.Copy(imageData, 0, frameBuffer.Address, imageData.Length); 
}

_tempImage = bitmap;
© www.soinside.com 2019 - 2024. All rights reserved.