Heim >Backend-Entwicklung >C++ >Wie kann ich transparente Bilder kopieren und in die Windows-Zwischenablage einfügen und dabei die Transparenz bewahren?

Wie kann ich transparente Bilder kopieren und in die Windows-Zwischenablage einfügen und dabei die Transparenz bewahren?

Patricia Arquette
Patricia ArquetteOriginal
2025-01-12 14:39:44396Durchsuche

How Can I Copy and Paste Transparent Images to the Windows Clipboard While Preserving Transparency?

Transparentes Bild in die Zwischenablage kopieren

Viele Entwickler haben beim Kopieren transparenter Bilder in die Zwischenablage Schwierigkeiten, die Transparenz beizubehalten. Standardmäßig unterstützt die Windows-Zwischenablage keine Transparenz.

Transparenz in den Daten der Zwischenablage

Um die Transparenz in den Zwischenablagedaten zu unterstützen, müssen Bilder in mehreren Formaten eingebunden werden:

  1. PNG: Ein verlustfreies Bildformat, das Transparenz unterstützt und von den meisten Bildbearbeitungsprogrammen und -anwendungen weitgehend akzeptiert wird.
  2. DIB (Geräteunabhängige Bitmap) : Ein ARGB-Format, das üblicherweise von Anwendungen als transparent unterstützt wird, aber unzuverlässig ist und zu inkonsistenten Ergebnissen führen kann.
  3. Bitmap: Ein Standardbildformat, das keine Transparenz unterstützt.

Bild mit Transparenz kopieren

Um ein Bild unter Beibehaltung der Transparenz zu kopieren, verwenden Sie den folgenden Code:

<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>

Bild aus der Zwischenablage abrufen

Um ein Bild aus der Zwischenablage abzurufen, verwenden Sie den folgenden Code:

<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>

Mit der oben genannten Methode können Entwickler transparente Bilder in der Zwischenablage effizient verarbeiten und so die Transparenz in Anwendungen bewahren, die Transparenz unterstützen.

Das obige ist der detaillierte Inhalt vonWie kann ich transparente Bilder kopieren und in die Windows-Zwischenablage einfügen und dabei die Transparenz bewahren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn