9

c# で空 (0x0 px または 1x1 px で完全に透明)の BitmapSourceインスタンスを作成する最速 (数行のコードと低リソース使用) の方法は何ですか?

4

6 に答える 6

15

Arcutusのヒントのおかげで、私は今これを持っています(これはうまくいきます):

var i = BitmapImage.Create(
    2,
    2,
    96,
    96,
    PixelFormats.Indexed1,
    new BitmapPalette(new List<Color> { Colors.Transparent }),
    new byte[] { 0, 0, 0, 0 },
    1);

この画像を小さくすると、ArgumentException が発生します。2x2px という小さな画像を作成できない理由がわかりません。

于 2010-08-26T11:23:18.003 に答える
14

Createメソッドを使用します。

MSDNから盗まれた例::)

int width = 128;
int height = width;
int stride = width/8;
byte[] pixels = new byte[height*stride];

// Try creating a new image with a custom palette.
List<System.Windows.Media.Color> colors = new List<System.Windows.Media.Color>();
colors.Add(System.Windows.Media.Colors.Red);
colors.Add(System.Windows.Media.Colors.Blue);
colors.Add(System.Windows.Media.Colors.Green);
BitmapPalette myPalette = new BitmapPalette(colors);

// Creates a new empty image with the pre-defined palette
BitmapSource image = BitmapSource.Create(
                                         width, height,
                                         96, 96,
                                         PixelFormats.Indexed1,
                                         myPalette, 
                                         pixels, 
                                         stride);
于 2010-08-26T09:46:12.617 に答える
5

大きなマネージド バイト配列を割り当てずにこのようなイメージを作成する方法は、 を使用すること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));
于 2016-02-02T02:09:29.693 に答える