.NET: сбой при сохранении изображения буфера обмена в PNG - PullRequest
4 голосов
/ 07 апреля 2011

У меня странная проблема с сохранением изображения буфера обмена в png. При создании снимка экрана с помощью prtscr или инструмента для подрезки он отлично работает с Clipboard.GetImage () и PngBitmapEncoder. Но, копируя изображение из Paint и делая то же самое, я получаю пустое изображение в результате. По крайней мере, он выглядит пустым при попытке просмотреть его, хотя он, кажется, содержит действительные данные PNG-изображения. При использовании Jpeg-кодировщика все работает нормально. В чем проблема с PNG и Paint? Это как-то связано с прозрачностью?

Обновление уточнить: я удаляю изображение успешно из буфера обмена. Я просто не могу сохранить его на диск с помощью PNGEncoder, если изображение было скопировано с Paint в первую очередь. Хотя я могу сохранять изображения в виде буфера обмена с помощью JpegEncoder ... но я хочу использовать PNG.

BitmapSource source = Clipboard.GetImage();
PngBitmapEncoder enc = new PngBitmapEncoder();
enc.Frames.Add(BitmapFrame.Create(source));
enc.Save(stream);

Над кодом создается файл изображения с невидимым содержимым, который становится полностью черным или белым в зависимости от средства просмотра (при копировании из ctrl-c из Paint). Что заставляет меня думать, что это как-то связано с прозрачностью ...

Ответы [ 2 ]

3 голосов
/ 07 апреля 2011

Ваша проблема очень похожа на ту, которую я описал здесь ... решение, которое я предложил, должно сработать для вас.

0 голосов
/ 07 апреля 2011

Сначала я бы попробовал что-то вроде ClipSpy , чтобы проверить, какое приложение помещает какой тип содержимого в буфер обмена.

...