質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
WPF

Windows Presentation Foundation (WPF) は、魅力的な外観のユーザー エクスペリエンスを持つ Windows クライアント アプリケーションを作成するための次世代プレゼンテーション システムです

Q&A

解決済

1回答

7605閲覧

inkcanvasの下にある画像をinkcanvasと重ね合わせで合成して保存したいです。

cancat

総合スコア313

WPF

Windows Presentation Foundation (WPF) は、魅力的な外観のユーザー エクスペリエンスを持つ Windows クライアント アプリケーションを作成するための次世代プレゼンテーション システムです

0グッド

0クリップ

投稿2017/03/08 11:55

こんにちは。
Windows10でWPFのアプリケーションを開発しています。
Visual Studio 2015 Communityを使っています。

###前提・実現したいこと
inkcanvasの下にある画像をinkcanvasと重ね合わせで合成して保存したいです。
inkcanvasの背景を透過にしている場合、pngとしては保存できます。
しかし、背景と合わせて保存したいです。

###該当のソースコード

xaml

1 <Grid> 2 <TextBox x:Name="textBox" HorizontalAlignment="Left" Height="94" Margin="190,56,0,0" TextWrapping="Wrap" Text="TextBox" VerticalAlignment="Top" Width="120" /> 3 <InkCanvas x:Name="inkcanvas" HorizontalAlignment="Left" Height="214" Margin="64,43,0,0" VerticalAlignment="Top" Width="391" Background="Transparent"/> 4 <Button x:Name="button" Content="Button" HorizontalAlignment="Left" Margin="408,267,0,0" VerticalAlignment="Top" Width="75" Click="button_Click"/> 5 6 </Grid>

C#

1 private void button_Click(object sender, RoutedEventArgs e) { 2 // PNG形式で保存 3 inkcanvas.toImage(@"C:\Test.png"); 4 } 5 } 6 7 8 // Canvas クラスの拡張メソッドとして実装する 9 public static class InkCanvasExtensions { 10 // Canvas を画像ファイルとして保存する。 11 public static void toImage(this InkCanvas canvas, string path) { 12 // レイアウトを再計算する 13 var size = new Size(canvas.Width, canvas.Height); 14 canvas.Measure(size); 15 canvas.Arrange(new Rect(size)); 16 17 // VisualObjectをBitmapに変換する 18 var renderBitmap = new RenderTargetBitmap((int)size.Width, // 画像の幅 19 (int)size.Height, // 画像の高さ 20 96.0d, // 横96.0DPI 21 96.0d, // 縦96.0DPI 22 PixelFormats.Pbgra32); // 32bit(RGBA各8bit) 23 renderBitmap.Render(canvas); 24 25 // 出力用の FileStream を作成する 26 using (var os = new FileStream(path, FileMode.Create)) { 27 // 変換したBitmapをエンコードしてFileStreamに保存する。 28 BitmapEncoder encoder = new PngBitmapEncoder(); 29 encoder.Frames.Add(BitmapFrame.Create(renderBitmap)); 30 encoder.Save(os); 31 } 32 } 33 }

###補足情報(言語/FW/ツール等のバージョンなど)
Microsoft Visual Studio Community 2015
Version 14.0.25424.00 Update 3
Microsoft .NET Framework
Version 4.6.01038

インストールしているバージョン:Community

Visual C# 2015 00322-20000-00000-AA575
Microsoft Visual C# 2015

です。
よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

こんな感じで、Backgroundを透過ブラシで指定してみてください。

XAML

1<InkCanvas> 2 <InkCanvas.Background> 3 <SolidColorBrush Color="Blue" Opacity="0.5"/> 4 </InkCanvas.Background> 5</InkCanvas>

投稿2017/03/09 01:23

hihijiji

総合スコア4150

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

cancat

2017/03/10 01:30

できました。 大感謝。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問