none
請問各位大神 有沒有能夠把 帶有Alpha的透明圖片複製到剪貼簿的方法? RRS feed

  • 問題

  • 把一張png透明圖片 Clipboard.SetImage後 貌似會自動轉成普通圖 貼上後沒辦法被判定為有Alpha

    小弟上網查了以後 貌似是有方法 但好像只能在Windows10使用

    小弟的電腦是Windows7 所以沒辦法測試

    但chrome 和clip studio paint在Win7都可以做得到這個功能

    還請大神幫忙OTZ

    附上從C#翻過來的代碼 (貼上後還是沒有透明)

    ''' <summary>
        ''' 將給定的圖像以PNG,DIB和標準位圖格式複製到剪貼板。
        ''' </summary>
        ''' <param name="image">要放在剪貼板上的圖像</param>
        ''' <param name="imageNoTr">可選的特定非透明版本的圖像,將其放置在剪貼板上。</param>
        ''' <param name="data">放置圖像的剪貼板數據對象。 可能已經包含其他內容。 保留為空以創建一個新的.</param>
        ''' <remarks></remarks>
        Public Sub SetClipboardImage(ByVal image As Bitmap, Optional ByVal imageNoTr As Bitmap = Nothing, Optional ByVal data As DataObject = Nothing)
            If data Is Nothing Then data = New DataObject
            If imageNoTr Is Nothing Then imageNoTr = image
            Using pngMemStream = New IO.MemoryStream
                Using dibMemStream = New IO.MemoryStream
                    ' As standard bitmap, without transparency support  作為標準位圖,沒有透明度支持
                    data.SetData(DataFormats.Bitmap, True, imageNoTr)
                    image.MakeTransparent()
                    ' As PNG. Gimp will prefer this over the other two.  //作為PNG。 Gimp會比其他兩個更喜歡它。
                    image.Save(pngMemStream, Imaging.ImageFormat.Png)
                    'As DIB. This is (wrongly) accepted as ARGB by many applications. 作為DIB。 許多應用程序(錯誤地)將其接受為ARGB。
                    data.SetData("PNG", False, pngMemStream)
                    'copy = true'參數表示可以在操作後安全處置MemoryStream。
                    Clipboard.SetDataObject(data, True)
                End Using
            End Using
        End Sub

    2019年11月14日 上午 10:37

所有回覆