Maison >développement back-end >C++ >Comment préserver la transparence lors de la copie d'images dans le presse-papiers de Windows ?
Comment conserver la transparence lors de la copie d'une image dans le presse-papiers
Problème : Lors de la copie d'une image PNG transparente dans le presse-papiers, la transparence est souvent perdue.
Raison :
Solution :
<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 pngMemoryStream = new MemoryStream()) using (MemoryStream dibMemoryStream = new MemoryStream()) { // 将图像以PNG、DIB和标准位图格式放入剪贴板 ... (代码省略,篇幅所限) Clipboard.SetDataObject(data, true); } }</code>
Le moyen le plus fiable de mettre une image avec prise en charge de la transparence dans le presse-papiers est d'utiliser le streaming PNG.
<code class="language-c#">byte[] bm32bData = ImageUtils.GetImageData(bm32b, out stride); // PNG格式的线条是反向的。 bm32b.RotateFlip(RotateFlipType.Rotate180FlipX); data.SetData("PNG", false, pngMemoryStream);</code>
Lors de la récupération d'images du presse-papiers, vérifiez les différents formats de données dans cet ordre : PNG, DIB, Bitmap, Image.
<code class="language-c#">public static Bitmap GetClipboardImage(DataObject retrievedData) { Bitmap clipboardimage = null; // 顺序:尝试PNG,然后尝试32位ARGB DIB,再尝试普通的位图和图像类型。 ... (代码省略,篇幅所限) return clipboardimage; }</code>
<code class="language-c#">public static Bitmap ImageFromClipboardDib(Byte[] dibBytes) { if (dibBytes == null || dibBytes.Length </code>
Outils supplémentaires :
En adoptant ces méthodes, vous pouvez gérer la transparence de l'image plus efficacement et éviter de perdre les informations de transparence lors de la copie dans le presse-papiers.
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!