Как скопировать PNG-изображение в буфер обмена с помощью Delphi

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

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

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

3 ответов


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

RegisterClipboardFormat('PNG') 

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

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


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


С delphi XE все, что я сделал, это:

Clipboard.Assign(Image1.Picture.Graphic);