문제: Windows 클립보드에 복사할 때 이미지 투명도가 유지됩니다.
Windows 클립보드는 기본적으로 투명도를 지원하지 않습니다. 그러나 알파 채널(투명도)을 지원하는 PNG를 포함하여 다양한 데이터 형식을 처리할 수 있습니다.
투명성을 유지하려면 다음 전략을 사용하세요.
MemoryStream
및 Image.Save()
을 사용하여 이미지를 PNG 스트림으로 변환합니다.DataObject
내에 저장합니다.DataObject
에 접속하세요.<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>
위 내용은 Windows 클립보드에 이미지를 복사할 때 투명성을 유지하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!