gpt4 book ai didi

c# - 如何获得 BitmapSource 的 PixelFormat

转载 作者:太空狗 更新时间:2023-10-29 20:25:27 27 4
gpt4 key购买 nike

我正在使用以下方法将 BitmapSource 转换为 Bitmap:

internal static Bitmap ConvertBitmapSourceToBitmap(BitmapSource bitmapSrc)
{
int width = bitmapSrc.PixelWidth;
int height = bitmapSrc.PixelHeight;
int stride = width * ((bitmapSrc.Format.BitsPerPixel + 7) / 8);

byte[] bits = new byte[height * stride];

bitmapSrc.CopyPixels(bits, stride, 0);

unsafe
{
fixed (byte* pBits = bits)
{
IntPtr ptr = new IntPtr(pBits);

return new System.Drawing.Bitmap(
width,
height,
stride,
System.Drawing.Imaging.PixelFormat.Format32bppPArgb, //The problem
ptr);
}
}
}

但我不知道如何获取 BitmapSourcePixelFormat,所以我的图像被破坏了。

对于上下文,我使用此技术是因为我想加载一个 tiff,它可能是 8 位或 16 位灰色或 24 位或 32 位颜色,并且我需要保留 PixelFormat。我更愿意修复我的 ConvertBitmapSourceToBitmap,因为它相当方便,但也很乐意用更好的技术替换以下代码,以便从 BitmapSource 创建位图:

Byte[] buffer = File.ReadAllBytes(filename.FullName);
using (MemoryStream stream = new MemoryStream(buffer))
{
TiffBitmapDecoder tbd = new TiffBitmapDecoder(stream, BitmapCreateOptions.PreservePixelFormat, BitmapCacheOption.OnLoad);

return BitmapBitmapSourceInterop.ConvertBitmapSourceToBitmap(tbd.Frames[0]);
}

最佳答案

使用 BitmapSource.Format 有什么问题吗? ?这 PixelFormat,您已经在使用它来确定步幅。

关于c# - 如何获得 BitmapSource 的 PixelFormat,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6373762/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com