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