Maison > développement back-end > C++ > Comment préserver la transparence lors de la copie d'images dans le presse-papiers de Windows ?

Comment préserver la transparence lors de la copie d'images dans le presse-papiers de Windows ?

Patricia Arquette
Libérer: 2025-01-12 14:55:44
original
203 Les gens l'ont consulté

How to Preserve Transparency When Copying Images to the Windows Clipboard?

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 :

  • Le presse-papiers Windows ne prend pas en charge nativement la transparence.
  • Un format spécifique appelé Device-Independent Bitmap (DIB) est couramment utilisé dans le presse-papiers, mais il présente des limites en matière de gestion de la transparence.

Solution :

  • Utiliser plusieurs formats de données :
<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>
Copier après la connexion
  • Convertir les images dans un format plus fiable :

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>
Copier après la connexion
  • Gérer différents formats de données :

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>
Copier après la connexion
  • Convertir en DIB à l'aide d'un code personnalisé :
<code class="language-c#">public static Bitmap ImageFromClipboardDib(Byte[] dibBytes)
{
    if (dibBytes == null || dibBytes.Length </code>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal