如何获得BitmapSource的PixelFormat

时间:2011-06-16 14:41:44

标签: c# bitmapsource pixelformat

我使用以下内容将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);
        }
    }
}

但我不知道如何获得PixelFormat的{​​{1}},因此我的图片被破坏了。

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

ConvertBitmapSourceToBitmap

1 个答案:

答案 0 :(得分:5)

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