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
Freigeben: 2025-01-12 14:39:44
Original
379 Leute haben es durchsucht

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage