Как бы вы скопировали PNG-изображение в буфер обмена с помощью Delphi? - PullRequest
7 голосов
/ 16 февраля 2010

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

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

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

Ответы [ 3 ]

5 голосов
/ 17 февраля 2010

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

3 голосов
/ 24 июля 2012

С Delphi XE все, что я делал, было:

Clipboard.Assign(Image1.Picture.Graphic);
3 голосов
/ 16 февраля 2010

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

RegisterClipboardFormat('PNG') 

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

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

...