Как я могу уменьшить размер растрового источника перед отправкой его на клипборд?
Я использую следующий код для рендеринга FrameworkElement в BitmapSource, а затем копирую его на клипборд. Все работает так, как задумано, за исключением того, что размер изображения составляет 2,5 МБ+. Если я вставлю его в MS paint и сохраню в виде PNG-файла, то размер уменьшится до 25 КБ. Как уменьшить размер изображения перед копированием на клипборд?
public static BitmapSource ConvertToBitmapSource(FrameworkElement element) { var pageSize = new System.Windows.Size(element.ActualWidth, element.ActualHeight); element.Measure(pageSize); element.Arrange(new Rect(pageSize)); element.UpdateLayout(); RenderTargetBitmap bmp = new RenderTargetBitmap((int)pageSize.Width, (int)pageSize.Height, 96, 96, PixelFormats.Pbgra32); bmp.Render(element); return bmp; }
Затем я использую это для копирования на клипборд.
Clipboard.SetImage(bitmapsource);
Что я уже пробовал:
Я пытался уменьшить качество PixelFormat, но WPF использует Pbgra32. Может быть, я упускаю что-то очень простое. Я новичок в WPF imaging.
Dave Kreskowiak
В итоге получается 25 тысяч на диске, а не в памяти. В памяти он по-прежнему составляет 2,5 МБ.
ryanba29
Нет ли способа уменьшить его в памяти перед отправкой на клиповую плату? Я больше не использую его в своем приложении.
Dave Kreskowiak
Как файл, конечно. Но как представление изображения, оно все равно будет 32 бита на пиксель для всего изображения. Если вы измените глубину пикселя и создадите новый объект изображения, он будет меньше, но у вас больше не будет исходного изображения. Он будет более низкого качества, потому что глубина цвета будет потеряна.
ryanba29
Обновление. - Вы правы. Мое изображение уменьшается до 66k, как только я вставляю его туда, где это необходимо. Если вы хотите опубликовать ответ, говорящий то же самое, я его приму.