Copier l'image transparente dans le presse-papiers
De nombreux développeurs rencontrent des difficultés à préserver la transparence lors de la copie d'images transparentes dans le presse-papiers. Par défaut, le presse-papiers Windows ne prend pas en charge la transparence.
Transparence dans les données du presse-papiers
Pour prendre en charge la transparence dans les données du presse-papiers, les images doivent être incluses dans plusieurs formats :
Copier l'image avec transparence
Pour copier une image en préservant la transparence, utilisez le code suivant :
<code class="language-c#">public static void SetClipboardImage(Bitmap image, Bitmap imageNoTr, DataObject data) { Clipboard.Clear(); if (data == null) data = new DataObject(); if (imageNoTr == null) imageNoTr = image; using (MemoryStream pngMemStream = new MemoryStream()) using (MemoryStream dibMemStream = new MemoryStream()) { // 作为标准位图,不支持透明度 data.SetData(DataFormats.Bitmap, true, imageNoTr); // 作为PNG。GIMP会优先选择此格式而不是其他两种。 image.Save(pngMemStream, ImageFormat.Png); data.SetData("PNG", false, pngMemStream); // 作为DIB。许多应用程序(错误地)将其识别为ARGB。 Byte[] dibData = ConvertToDib(image); dibMemStream.Write(dibData, 0, dibData.Length); data.SetData(DataFormats.Dib, false, dibMemStream); // 'copy=true' 参数表示在操作后可以安全地释放MemoryStream。 Clipboard.SetDataObject(data, true); } }</code>
Obtenir l'image du presse-papiers
Pour récupérer une image du presse-papier, utilisez le code suivant :
<code class="language-c#">public static Bitmap GetClipboardImage(DataObject retrievedData) { Bitmap clipboardimage = null; // 顺序:尝试PNG,然后尝试32位ARGB DIB,然后尝试普通的Bitmap和Image类型。 if (retrievedData.GetDataPresent("PNG", false)) { MemoryStream png_stream = retrievedData.GetData("PNG", false) as MemoryStream; if (png_stream != null) using (Bitmap bm = new Bitmap(png_stream)) clipboardimage = ImageUtils.CloneImage(bm); } if (clipboardimage == null && retrievedData.GetDataPresent(DataFormats.Dib, false)) { MemoryStream dib = retrievedData.GetData(DataFormats.Dib, false) as MemoryStream; if (dib != null) clipboardimage = ImageFromClipboardDib(dib.ToArray()); } if (clipboardimage == null && retrievedData.GetDataPresent(DataFormats.Bitmap)) clipboardimage = new Bitmap(retrievedData.GetData(DataFormats.Bitmap) as Image); if (clipboardimage == null && retrievedData.GetDataPresent(typeof(Image))) clipboardimage = new Bitmap(retrievedData.GetData(typeof(Image)) as Image); return clipboardimage; }</code>
En utilisant la méthode ci-dessus, les développeurs peuvent gérer efficacement les images transparentes dans le presse-papiers, préservant ainsi la transparence dans les applications prenant en charge la transparence.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!