Почему мой Image.Source остается черным после настройки потока? - PullRequest
0 голосов
/ 06 июля 2018

Поэтому я пытаюсь добавить «скриншот» в источник изображения, сохранив растровое изображение в потоке и установив источник в BitmapImage.

Но по какой-то причине элемент управления изображением просто черный, он ничего не показывает. Почему это так?

//this.Hide();
//Create a black bitmap with the correct width and height and use it as a "Canvas" that we will
//be performing a bit-block transfer on. (Bitmap is mutable)
Bitmap printscreen = new Bitmap(Screen.PrimaryScreen.Bounds.Width,
    Screen.PrimaryScreen.Bounds.Height);


//To perform a bit-block transfer we need the object to be a "Graphics" object.
Graphics g = Graphics.FromImage(printscreen);


//Perform the bit-block transfer and alter the image.
//Source being the screens pixels, and the destination is the black bitmap.
g.CopyFromScreen(0, 0, 0, 0, printscreen.Size);


//Create a temporary memory stream for the image.
using (MemoryStream mStream = new MemoryStream())
{
    //Save the graphics object (image) in the memory stream. with a specified format.
    printscreen.Save(mStream, ImageFormat.Bmp);
    var ImageSource = new BitmapImage();
    ImageSource.BeginInit();
    ImageSource.StreamSource = mStream;
    ImageSource.EndInit();
    ImageBox.Source = ImageSource;
}

Как видите, я устанавливаю свойство Source для ImageSource, но оно черное.

WPF

<Window x:Class="eh.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:eh"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Loaded="MainWindow_OnLoaded" WindowStyle="None" ResizeMode="NoResize" Background="Black" WindowState="Maximized" WindowStartupLocation="Manual" Left="0" Top="0" Width="800">
    <Grid>
        <Image x:Name="ImageBox" HorizontalAlignment="Left" VerticalAlignment="Top" Height="1920" Width="1080"/>
    </Grid>
</Window>

1 Ответ

0 голосов
/ 06 июля 2018

Я забыл добавить CacheOption, поэтому я добавил

ImageSource.CacheOption = BitmapCacheOption.OnLoad;
...