Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在C中创建一个空位图源#_C#_Wpf_Bitmapsource - Fatal编程技术网

C# 在C中创建一个空位图源#

C# 在C中创建一个空位图源#,c#,wpf,bitmapsource,C#,Wpf,Bitmapsource,在c#中创建空(0x0 px或1x1 px,完全透明)实例的最快方法是什么(代码行数少,资源使用率低),在不应渲染任何内容时使用该方法。使用该方法 从MSDN中窃取的示例:) int-width=128; 整数高度=宽度; int步长=宽度/8; 字节[]像素=新字节[高度*步幅]; //尝试使用自定义调色板创建新图像。 列表颜色=新列表(); 添加(System.Windows.Media.colors.Red); 添加(System.Windows.Media.colors.Blue); 添

在c#中创建空(0x0 px或1x1 px,完全透明)实例的最快方法是什么(代码行数少,资源使用率低),在不应渲染任何内容时使用该方法。

使用该方法

从MSDN中窃取的示例:)

int-width=128;
整数高度=宽度;
int步长=宽度/8;
字节[]像素=新字节[高度*步幅];
//尝试使用自定义调色板创建新图像。
列表颜色=新列表();
添加(System.Windows.Media.colors.Red);
添加(System.Windows.Media.colors.Blue);
添加(System.Windows.Media.colors.Green);
BitmapPalette myPalette=新的BitmapPalette(颜色);
//使用预定义的调色板创建新的空图像
BitmapSource图像=BitmapSource.Create(
宽度,高度,
96, 96,
PixelFormats.indexe1,
我的调色板,
像素,
步幅);
多亏我现在有了这个(它很好用):

var i=BitmapImage.Create(
2.
2.
96,
96,
PixelFormats.indexe1,
新位图调色板(新列表{Colors.Transparent}),
新字节[]{0,0,0,0},
1);

如果我把这个图像缩小,我会得到一个异常。我不知道为什么我不能创建一个2x2px的较小图像。

看看这个。它适用于任何像素格式

  public static BitmapSource CreateEmtpyBitmapSource(int width, int height, PixelFormat pixelFormat)
    {
        PixelFormat pf = pixelFormat;
        int rawStride = (width * pf.BitsPerPixel + 7) / 8;
        var rawImage = new byte[rawStride * height];
        var bitmap = BitmapSource.Create(width, height, 96, 96, pf, null, rawImage, rawStride);
        return bitmap;
    }

创建这样一个映像而不分配大的托管字节数组的方法是使用
TransformedBitmap

var bmptmp = BitmapSource.Create(1,1,96,96,PixelFormats.Bgr24,null,new byte[3]{0,0,0},3);

var imgcreated = new TransformedBitmap(bmptmp, new ScaleTransform(width, height));

可以按如下方式生成最小位图源:

    public static BitmapSource CreateEmptyBitmap()
    {
        return BitmapSource.Create(1, 1, 1, 1, PixelFormats.BlackWhite, null, new byte[] {0}, 1);
    }

另一种方法是创建从BitmapSource派生的BitmapImage类的实例:


BitmapSource emptySource=new BitmapImage()

您可以使用不同的格式(索引格式更为特殊,但我也不知道确切原因)。例如:BitmapSource.Create(1,1,96,96,PixelFormats.Bgra32,null,new byte[]{0,0,0},4)(在本例中,步幅为四,因为Bgra32中每个像素有四个字节,数组中的四个字节描述一个像素)。编辑:事实上,如果你把字节数组缩短为一个像素对应一个元素,我认为你的例子也可以。使用你的参数(1,1,96,96,PixelFormats.Bgra32,null,new byte[]{0,0,0,0},4)将阻止整个WPF UI的呈现。这将创建一个可见的图像(即黑色像素)。
var bmptmp = BitmapSource.Create(1,1,96,96,PixelFormats.Bgr24,null,new byte[3]{0,0,0},3);

var imgcreated = new TransformedBitmap(bmptmp, new ScaleTransform(width, height));
    public static BitmapSource CreateEmptyBitmap()
    {
        return BitmapSource.Create(1, 1, 1, 1, PixelFormats.BlackWhite, null, new byte[] {0}, 1);
    }