>백엔드 개발 >C++ >투명도를 유지하면서 어떻게 투명한 이미지를 Windows 클립보드에 복사하여 붙여넣을 수 있습니까?

투명도를 유지하면서 어떻게 투명한 이미지를 Windows 클립보드에 복사하여 붙여넣을 수 있습니까?

Patricia Arquette
Patricia Arquette원래의
2025-01-12 14:39:44347검색

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

투명 이미지를 클립보드에 복사

많은 개발자들이 투명한 이미지를 클립보드에 복사할 때 투명성을 유지하는 데 어려움을 겪습니다. 기본적으로 Windows 클립보드는 투명도를 지원하지 않습니다.

클립보드 데이터의 투명성

클립보드 데이터의 투명성을 지원하려면 이미지가 여러 형식으로 포함되어야 합니다.

  1. PNG: 투명성을 지원하고 대부분의 이미지 편집기 및 애플리케이션에서 널리 사용되는 무손실 이미지 형식입니다.
  2. DIB(Device-Independent Bitmap) : 일반적으로 애플리케이션에서 투명성을 지원하는 ARGB 형식이지만 신뢰할 수 없으며 일관성 없는 결과를 초래할 수 있습니다.
  3. 비트맵: 투명도를 지원하지 않는 표준 이미지 형식입니다.

투명하게 이미지 복사

투명도를 유지하면서 이미지를 복사하려면 다음 코드를 사용하세요.

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

클립보드에서 이미지 가져오기

클립보드에서 이미지를 검색하려면 다음 코드를 사용하세요.

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

위 방법을 사용하면 개발자는 투명도를 지원하는 애플리케이션에서 투명도를 유지하면서 클립보드의 투명 이미지를 효율적으로 처리할 수 있습니다.

위 내용은 투명도를 유지하면서 어떻게 투명한 이미지를 Windows 클립보드에 복사하여 붙여넣을 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.