LEADTOOLS ナレッジベース

[Document Imagingファミリー][WPF] アノテーションのAnnPictureの透過色が適用されない

WPFのアノテーション(Leadtools.Windows.Annotations)でスタンプオブジェクトなどで設定できるピクチャー(AnnPicture)のユーザーカラー透過色が適用されません。

AnnPicture.TransparentMode = AnnTransparentMode.UseColor;
AnnPicture.TransparentColor = Colors.White;


回避方法

一旦、RasterImageにロードして透過色を設定し、32ビットでメモリストリームに保存した画像をピクチャー(AnnPicture)に設定する方法をご検討ください。
コードではなく、プロパティダイアログからピクチャーを設定したい場合は、あらかじめ透過色が設定されている画像をご利用ください。プロパティダイアログ上で透過色を設定することはできません。

以下は、ピクチャーを設定したスタンプオブジェクトを追加するサンプルコードです。

サンプルコード(VB.NET)

Private Sub Button_Click_1(sender As Object, e As RoutedEventArgs)

    Dim automation As AnnAutomation = annAutomationManager.Automations(0)
    Dim objStamp As New AnnStampObject()

    Using codecs As New Leadtools.Codecs.RasterCodecs()
        Using rasterImage As RasterImage = codecs.Load("..\..\Images\Test.png")
            ' 透過色を設定します。
            rasterImage.TransparentColor = RasterColor.FromKnownColor(RasterKnownColor.White)
            rasterImage.Transparent = True

            ' メモリストリームに32ビット画像として保存します。
            Using ms As New System.IO.MemoryStream()
                codecs.Save(rasterImage, ms, RasterImageFormat.Png, 32)

                Dim BitmapImage As New BitmapImage()
                BitmapImage.BeginInit()
                BitmapImage.CacheOption = BitmapCacheOption.OnLoad
                BitmapImage.StreamSource = ms
                BitmapImage.EndInit()

                ' この画像を設定してAnnPictureを作成します。
                Dim annPicture As New AnnPicture(BitmapImage)

                objStamp.Rect = New Rect(30, 30, 80, 80)
                objStamp.Picture = annPicture
            End Using
        End Using
    End Using

    ' アノテーション追加時にプロパティダイアログを表示しません。
    annAutomationManager.ShowTextObjectsPropertiesDialogAfterDraw = False
    ' AnnStampObjectを追加します。
    automation.Container.Children.Insert(0, objStamp)

End Sub

サンプルコード(C#)

private void Button_Click_1(object sender, RoutedEventArgs e)
{
    AnnAutomation automation = annAutomationManager.Automations[0];
    AnnStampObject objStamp = new AnnStampObject();

    using (Leadtools.Codecs.RasterCodecs codecs = new Leadtools.Codecs.RasterCodecs())
    {
        using (RasterImage rasterImage = codecs.Load(@"..\..\Images\Test.png"))
        {
            // 透過色を設定します。
            rasterImage.TransparentColor = RasterColor.FromKnownColor(RasterKnownColor.White);
            rasterImage.Transparent = true;

            // メモリストリームに32ビット画像として保存します。
            using (System.IO.MemoryStream ms = new System.IO.MemoryStream())
            {
                codecs.Save(rasterImage, ms, RasterImageFormat.Png, 32);

                var bitmapImage = new BitmapImage();
                bitmapImage.BeginInit();
                bitmapImage.CacheOption = BitmapCacheOption.OnLoad;
                bitmapImage.StreamSource = ms;
                bitmapImage.EndInit();

                // この画像を設定してAnnPictureを作成します。
                AnnPicture annPicture = new AnnPicture(bitmapImage);

                objStamp.Rect = new Rect(30, 30, 80, 80);
                objStamp.Picture = annPicture;
            }
        }
    }

    // アノテーション追加時にプロパティダイアログを表示しません。
    annAutomationManager.ShowTextObjectsPropertiesDialogAfterDraw = false;
    // AnnStampObjectを追加します。
    automation.Container.Children.Insert(0, objStamp);
}

0 コメント

記事コメントは受け付けていません。