2010-02-16 5 views
7

Использование Delphi 2010 Я хотел бы скопировать PNG-изображение в буфер обмена, сохраняя альфа-прозрачность. К сожалению, метод TPngImage.SaveToClipboardFormat приведет его к растровому изображению, и прозрачность будет потеряна.Как скопировать PNG-изображение в буфер обмена с помощью Delphi

Я хотел бы, чтобы изображение PNG было вставлено в приложениях, таких как Photoshop и Word с альфа-прозрачностью.

Любая идея о том, как это сделать? Как другие приложения делают для копирования прозрачности в буфер обмена?

+0

Джон, сделал это работает для вас, потому что у меня есть такая же проблема riht сейчас, использовать ли вы TPNGObject? Я использую D7 byt. Я думаю, что это та же концепция. –

+0

Насколько я помню, не многие приложения обрабатывают формат PNG в буфере обмена, но это старый проект, и я не могу вспомнить точные ограничения. – jonjbar

ответ

3

Возможно, они используют альтернативный формат буфера обмена, см. http://msdn.microsoft.com/en-us/library/ms649013(VS.85).aspx для получения списка доступных форматов буфера обмена. Или они могут зарегистрировать свой собственный формат буфера обмена, такие как

RegisterClipboardFormat('PNG') 

, а затем просто записать данные в формате PNG в буфер обмена. Если указанная строка формата буфера обмена является стандартной (т. Е. Другие приложения регистрируют один и тот же формат буфера обмена), вы сможете вставить ее в другие приложения, которые поддерживают этот формат буфера обмена.

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

5

Сначала я скопировал изображение с информацией о прозрачности в буфер обмена в Photoshop, а затем изучил, что на самом деле находится в буфере обмена. Когда вы это знаете, вы, вероятно, можете выяснить, как сами писать эти данные.

3

С DELPHI XE, все я сделал:

Clipboard.Assign(Image1.Picture.Graphic); 
+1

Для других читателей 'Clipboard' определен в модуле' ClipBrd'. – saastn