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

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

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

UWPは、Universal Windows Platformの略。様々なデバイス向けに提供されているアプリケーションを共通のフレームワーク上で動作可能にする仕組みで、Windows10で導入されました。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Q&A

1回答

3319閲覧

UWPのinkCanvasで任意透明度のStrokeを描画したい。

退会済みユーザー

退会済みユーザー

総合スコア0

UWP

UWPは、Universal Windows Platformの略。様々なデバイス向けに提供されているアプリケーションを共通のフレームワーク上で動作可能にする仕組みで、Windows10で導入されました。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

0グッド

1クリップ

投稿2018/07/24 05:13

編集2018/07/25 05:40

以前、WPFを使って、PaintSoft(水彩画ペインティングソフト)を作ったのですが、その時には任意の透明度のStrokeをinkCanvas上に描画することが出来ましたが、今回、UWPを使って同様なものを作ろうと始めたのですが、WPFとUWPではいろいろな面で違いはあったのですが、UWPでもそれなりにまとまったのですが、上記の任意の透明度のStrokeをinkCanvas上に描画しようとしたのですが、下記に記すコードでは不透明のStrokeしか描画できません。どのようにしたら良いのか教えてください。

発生している問題・エラーメッセージ

特に現状コードではエラーは出ません。ただ、不透明の色での描画しかできないのです。

該当のソースコード

private InkDrawingAttributes attributes; byte TC, R, G, B; public MainPage() { this.InitializeComponent(); attributes = new InkDrawingAttributes(); attributes.Color = Windows.UI.Color.FromArgb(TC, R, G, B); attributes.FitToCurve = false; attributes.IgnorePressure = false; attributes.PenTip = PenTipShape.Circle; attributes.Size = new Size(penSize, penSize); inkCanvas.InkPresenter.UpdateDefaultDrawingAttributes(attributes); inkCanvas.InkPresenter.InputDeviceTypes = Windows.UI.Core.CoreInputDeviceTypes.Mouse | Windows.UI.Core.CoreInputDeviceTypes.Pen; }

 このコードの後で透明度のTCを含めて各種の変数を指定して、描画をするコードが続きますが省略します。
この透明度以外は欲しい機能は動作しています。

試したこと

WPFでのコードの関連部分だけ書きますと下記のとおりです。
col = Color.FromArgb(TC,R, G, B);
inkCanvas.DefaultDrawingAttributes.Color = col;
この色及び透明度指定は同じようにArgbで行っています。

補足情報(FW/ツールのバージョンなど)

開発ツールはVisual Studio Community 2017 です。

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

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

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

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

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

guest

回答1

0

InkDrawingAttributesの設定の箇所で

cs

1attributes = new InkDrawingAttributes();

cs

1attributes = InkDrawingAttributes.CreateForPencil();

として

cs

1attributes.PencilProperties.Opacity = 0.5;

とすると透明度があるえんぴつ的な線を描画ができると思いますが、いかんせんCreateForPencilなのでPencilモードになってしまうため採用は難しいと思います。

そうするとInkCanvas全体にOpacityを設定するしかなさそうですが線ごとに指定することができないため、現実的ではなさそうですね…

回答になっていなくてすみません…

投稿2018/07/25 11:46

_shunsuke_kawai

総合スコア104

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

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

退会済みユーザー

退会済みユーザー

2018/07/25 13:55

ご提案ありがとうございました。おっしゃるようにinkCanvasのpropertyでOpacityを指定すると描かれる全てのStrokeに所定の透明度を掛けることができますが、現実的ではありませんでした。WPFでは透明度も加えたArgbで色選択をすれば任意の透明度で個々のStrokeを描くことができたのにUWPでは同じArgbで色選択した色は使用中の色を表現するための色見本みたいに枠として「rectangle」を設けて、選択した色を「rectangle」にFillで色付けすると透明度も加えた条件で色付けされますが、inkCanvas上に描画すると透明度は無視されてしまいます。どこが違うのでしょうか?  今回のご提案は明日少しいじってみようかと考えています。こんなことができるかどうか知りませんが、スマートではありませんが、筆タイプ毎にPenAttributesとかBrushAttributesを使うときごとに宣言させてはどうでしょうか?少しいじってみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問