1

動的に生成された画像を配置する必要があります

var img = new Bitmap(..);
// draw something on img canvas ...

ToggleButtonの背景に。生成された画像をToggleButton.Contentプロパティに割り当てると、画像自体ではなく、「System.Drawing.Bitmap」文字列が表示されます。ToString()メソッドがContentプロパティに使用されているようです。代わりに生成された画像を表示するにはどうすればよいですか?

4

2 に答える 2

2

WPFにメソッドを呼び出すだけの適切なコンバーターがない場合ToString()、ビットマップ形式は不適切です。通常使用するのはImage、ソースがであるBitmapImage場合です。異なる形式間で変換を行うには、いくつかの方法があります。からへ
の変換を行う1つの方法を次に示します。BitmapBitmapImage

public static BitmapImage BitmapToBitmapImage(System.Drawing.Bitmap bitmap)
{
    MemoryStream ms = new MemoryStream();
    bitmap.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
    BitmapImage bImg = new System.Windows.Media.Imaging.BitmapImage();

    bImg.BeginInit();
    bImg.StreamSource = new MemoryStream(ms.ToArray());
    bImg.CreateOptions = BitmapCreateOptions.None;
    bImg.CacheOption = BitmapCacheOption.Default;
    bImg.EndInit();

    ms.Close();

    return bImg;
}

ImageFormat.Png非圧縮形式よりも低速ですが、透明性がある場合はそれを保持することに注意してください。
これで、これを画像コントロールのソースとして使用し、この画像コントロールをボタンのコンテンツとして使用できるようになります。

于 2011-01-07T23:31:11.190 に答える
2

「Content」プロパティは、ToggleButtonの表面に書き込む内容に関係します。UI要素の「Background」プロパティを初期化する必要があります。これが1つの例です:

        PixelFormat pf = PixelFormats.Bgr32;
        int width = 200;
        int height = 200;
        int rawStride = (width * pf.BitsPerPixel + 7) / 8;
        byte[] rawImage = new byte[rawStride * height];

        // Initialize the image with data.
        Random value = new Random();
        value.NextBytes(rawImage);

        // Create a BitmapSource.
        BitmapSource bitmap = BitmapSource.Create(width, height, 96, 96, pf, null, rawImage, rawStride);

        ImageBrush imgBrush = new ImageBrush(bitmap);
        myToggleButton.Background = imgBrush;

次の記事http://msdn.microsoft.com/en-us/library/system.windows.media.imaging.bitmapsource(VS.85).aspxを使用してイメージを作成しました

于 2011-01-07T23:45:52.610 に答える