Comment puis-je obtenir une image à partir du presse-papiers sans perdre le canal alpha .NET?
Je suis en train d'enregistrer une image copiée dans le presse-papiers, mais c'est perdre son canal alpha:
Image clipboardImage = Clipboard.GetImage();
string imagePath = Path.GetTempFileName();
clipboardImage.Save(imagePath);
Si je copie une image 32 bits de PhotoShop ou IE/Firefox/Chrome et d'exécuter le code ci-dessus, la sortie perd son canal alpha, au lieu de cela, il est sauvegardé sur un fond noir.
L'image est enregistrée au format PNG, qui peut contenir un canal alpha.
Les données correctes semble être dans le presse-papiers, car les coller dans d'autres applications (comme PhotoShop) conserve le canal alpha.
Quelqu'un peut me mettre hors de ma misère?
Merci d'avance!
Mise à jour:
//outputs FALSE
Debug.WriteLine(Image.IsAlphaPixelFormat(Clipboard.GetImage().PixelFormat));
Ci-dessus suggère que les données alpha est perdu dès qu'on le sort de la presse-papiers. Peut-être que j'ai besoin de le sortir de le presse-papiers d'une autre façon?
bonne question. si vous avez résolu, peut-être que vous voulez mettre à jour votre question avec un code de travail, s'il vous plaît?
OriginalL'auteur Jaffa The Cake | 2009-06-15
Vous devez vous connecter pour publier un commentaire.
Au lieu de l'appeler
Clipboard.GetImage()
, essayez d'appelerClipboard.GetDataObject()
Il renvoie un IDataObject, vous pouvez tour à tour requête en appelant
dataObject.GetFormats()
.GetFormats()
retourne le type de formats pris en charge par le presse-papiers de l'objet: il y a peut être un plus précis format pris en charge que vous pouvez utiliser pour extraire les données.Je n'ai pas touché le presse-papiers dans un temps long, mais la vérification de MSDN il ressemble le format spécifique que vous souhaitez vérifier CF_DIBV5, qui est le format pour les images avec des couleurs étendue de l'information (canal alpha, plus de 8 bits par couleur, etc)
Dirait que le problème est beaucoup plus compliqué que ce que je pensais, et je me suis trompé quand j'ai dit que je pouvais copier des images à partir de navigateurs de PhotoShop et de conserver la transparence. Je peux le copier dans PhotoShop, mais je pense que c'est juste de stocker une référence à la couche sur le presse-papiers, plutôt que les données de l'image. "Adobe Photoshop Image" est l'un des formats retourné par GetFormats, mais j'ai tout simplement obtenir la valeur null lorsque j'essaie de lire ces données. Merci beaucoup pour toute l'aide!
À propos de Photoshop presse-papiers de l'enfer, lire mon post ici: stackoverflow.com/questions/12258519/... - j'utilise VBS/COM pour générer de la PNG à partir de photoshop avec son contenu du presse-papiers, puis de lire le format PNG sur mon programme.
C'est en effet la solution, mais malheureusement, DIB5 ne semble pas être couramment utilisés. Le plus souvent, les applications (y compris les Windows lui-même) utiliser 32 bits RVB DIB (pas de v5, les vieux v1) et il suffit de faire semblant de la 4ème octet rend ARGB. J'ai posté le code pour essayer et obtenir de l'alpha-capable de l'image de la DataObject dans diverses utilisé alpha-capable formats en cette réponse.
OriginalL'auteur Kevin Pullin
Qu'il pourrait être comme cet article suggère, que le presse-papiers de l'objet, de travail au sein de Win32, n'est en mesure de gérer les bitmaps, qui n'ont pas la transparence/partiellement transparent canal alpha. Le fournisseur OLE presse-papiers est plus capable, il me semble:
Cependant, la netez était le meilleur article que j'ai trouvé sur le sujet.
(attention, je n'ai pas testé moi-même)
OriginalL'auteur Henrik
L'image est enregistrée comme une image où les pixels transparents sont visibles sur le presse-papiers pour utiliser ce code
Je sais qu'il fonctionne correctement lorsque j'ai copié une image à partir de firefox à mon programme, mais je vois qu'il na pas copier les ombres portées
OriginalL'auteur Jim
Je suis juste en utilisant les Formulaires de methode. Ce n'est pas que belle solution à l'aide de
GetFormat
comme Kevin est de nous dire, mais son plus rapide et fonctionne quiete bien à tous.OriginalL'auteur Nasenbaer