Я пытаюсь сделать скриншот всего рабочего стола, сохранить его в растровое изображение, преобразовать растровое изображение в ImageSource и установить этот ImageSource в качестве фона для Canvas, на котором я собираюсь рисовать прозрачные прямоугольники.
- Я пытался добавить изображение непосредственно в Canvas.
- Я пытался добавить изображение в качестве фона для Canvas.
- Я даже пытался добавить изображение в качестве фона длясоздать прозрачный холст, ничего не получилось.
Я начал с снятия рабочего стола и конвертировал изображение:
Bitmap bitmapImage = new Bitmap(SystemInformation.VirtualScreen.Width, SystemInformation.VirtualScreen.Height);
myNewImageSource = Miscellaneous.ImageSourceFromBitmap(bitmapImage);
И это функция преобразования, найденная на другомнить:
[DllImport("gdi32.dll", EntryPoint = "DeleteObject")]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool DeleteObject([In] IntPtr hObject);
public static System.Windows.Media.ImageSource ImageSourceFromBitmap(Bitmap bmp)
{
var handle = bmp.GetHbitmap();
try
{
return Imaging.CreateBitmapSourceFromHBitmap(handle, IntPtr.Zero, Int32Rect.Empty, BitmapSizeOptions.FromEmptyOptions());
}
finally { DeleteObject(handle); }
}
- Установка изображения напрямую:
AddImageToCanvas(0, 0, new System.Windows.Controls.Image() { Source = myNewImageSource });
public void AddImageToCanvas(Int32 x, Int32 y, System.Windows.Controls.Image z)
{
imageHolder.Children.Add(z);
Canvas.SetLeft(z, x);
Canvas.SetTop(z, y);
}
Добавление изображения в качестве фона для холста:
imageHolder.Background = new ImageBrush(){ ImageSource = myNewImageSource };
Установка изображения в качестве фона формы и создание прозрачного холста:
Background = new ImageBrush(){ ImageSource = myNewImageSource }
imageHolder.Background = new SolidColorBrush(System.Windows.Media.Color.FromRgb(0, 0, 0)) { Opacity = 0 }
//I tried making the background transparent by both setting the Opacity to 0 and trying with argb to set the alpha value to 0, neither worked.
Я ожидаю увидеть фрагмент моего рабочего стола в качестве фона для холста, но ничего не происходит иЯ не получаю ошибки. Иногда я получаю полностью черное окно.