Heim >Backend-Entwicklung >C++ >Wie bleibt die Transparenz beim Kopieren von Bildern in die Windows-Zwischenablage erhalten?
Problem:Beim Kopieren in die Windows-Zwischenablage bleibt die Bildtransparenz erhalten.
Die Windows-Zwischenablage unterstützt grundsätzlich keine Transparenz. Es kann jedoch verschiedene Datenformate verarbeiten, einschließlich PNG, das nicht Alphakanäle (Transparenz) unterstützt.
Um die Transparenz aufrechtzuerhalten, wenden Sie diese Strategie an:
MemoryStream
und Image.Save()
in einen PNG-Stream.DataObject
.DataObject
zu.<code class="language-csharp">public static void SetClipboardImage(Bitmap image, Bitmap imageNoTr, DataObject data) { Clipboard.Clear(); data ??= new DataObject(); //Null-conditional operator for brevity imageNoTr ??= image; //Null-conditional operator for brevity using (MemoryStream pngMemStream = new MemoryStream()) using (MemoryStream dibMemStream = new MemoryStream()) { data.SetData(DataFormats.Bitmap, true, imageNoTr); image.Save(pngMemStream, ImageFormat.Png); data.SetData("PNG", false, pngMemStream); byte[] dibData = ConvertToDib(image); dibMemStream.Write(dibData, 0, dibData.Length); data.SetData(DataFormats.Dib, false, dibMemStream); Clipboard.SetDataObject(data, true); } } public static Bitmap GetClipboardImage(DataObject retrievedData) { Bitmap clipboardimage = null; if (retrievedData.GetDataPresent("PNG", false)) { MemoryStream pngStream = retrievedData.GetData("PNG", false) as MemoryStream; using (Bitmap bm = new Bitmap(pngStream)) clipboardimage = ImageUtils.CloneImage(bm); } else if (retrievedData.GetDataPresent(DataFormats.Dib, false)) { MemoryStream dib = retrievedData.GetData(DataFormats.Dib, false) as MemoryStream; clipboardimage = dib != null ? ImageFromClipboardDib(dib.ToArray()) : null; } else if (retrievedData.GetDataPresent(DataFormats.Bitmap)) { clipboardimage = new Bitmap(retrievedData.GetData(DataFormats.Bitmap) as Image); } else if (retrievedData.GetDataPresent(typeof(Image))) { clipboardimage = new Bitmap(retrievedData.GetData(typeof(Image)) as Image); } return clipboardimage; }</code>
Das obige ist der detaillierte Inhalt vonWie bleibt die Transparenz beim Kopieren von Bildern in die Windows-Zwischenablage erhalten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!