2010-02-16 6 views
7

Utilisation de Delphi 2010 Je voudrais copier une image PNG dans le presse-papiers tout en préservant la transparence alpha. Malheureusement, la méthode TPngImage.SaveToClipboardFormat l'attirera vers un bitmap et la transparence sera perdue.Comment copiez-vous une image PNG dans le presse-papier en utilisant Delphi?

Je voudrais que l'image PNG soit collée dans des applications telles que Photoshop et Word avec transparence alpha.

Une idée sur la façon de faire cela? Comment les autres applications font-elles pour copier la transparence dans le presse-papiers?

+0

John, est-il travailler pour vous parce que j'ai le même problème riht maintenant, utilisez-vous TPNGObject? J'utilise D7 byt je pense que c'est le même concept –

+0

Pour autant que je me souvienne, peu d'applications gèrent le format PNG dans le presse-papiers mais c'est un vieux projet et je ne me souviens pas des limites exactes. – jonjbar

Répondre

3

Il se peut qu'ils utilisent un format de Presse-papiers différent, voir http://msdn.microsoft.com/en-us/library/ms649013(VS.85).aspx pour une liste des formats de Presse-papiers disponibles. Ou ils peuvent enregistrer leur propre format de presse-papiers tels que

RegisterClipboardFormat('PNG') 

puis simplement écrire les données .png le presse-papiers. Si la chaîne de format de Presse-papiers spécifiée est standard (c'est-à-dire si d'autres applications enregistrent le même format de Presse-papiers), vous pourrez ensuite le coller dans d'autres applications prenant en charge ce format de Presse-papiers.

Vous devrez peut-être appeler les fonctions Windows directement car l'emballage du Presse-papiers de Delphi n'est pas très bon.

5

Je copierais d'abord une image avec des informations de transparence dans le presse-papiers de Photoshop, puis j'examinerais ce qui se trouve réellement dans le presse-papiers. Quand vous le savez, vous pouvez probablement trouver comment écrire vous-même ces données.

3

Avec XE delphi, tout ce que je ne faisais que:

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

Pour les autres lecteurs, 'Clipboard' est défini dans l'unité' ClipBrd'. – saastn