質問: new Uri(@"url"); bt.EndInit(); 噛み砕いた説明は出来ないでしょうか。 ただのおまじない、程度の理解しか出来ていません。 ### 質問3 これから新規にアプリを作成する場合は、winformよりwpfのほうがいいですか?調べた限り、メリットとして指摘されているのは拡大してもぼやけないということかと思います。これはベクター画像のイメージでしょうか。しかしwinformでも高いdpiに対応しているという記事を発見しました。 wpfのデメリットとして感じているのは、資料がやや少ないことと、winformよりは難しく感じることです。
回答: > > 質問1 > > > たぶんBitmapImageをそのままCanvas.Childrenに追加しようとしたんだと思いますが、 画像データであるBitmapImageクラスとそれを表示するためのUI要素であるImageクラスは別物です。 ImageクラスがBitmapImage(正確にはImageSource型)を表示するための要素ですので、 こちらをCanvasに追加してあげれば表示されます。 ``` var bitmapImage = new BitmapImage(new Uri("...")); var img = new Image() { Source = bitmapImage }; Canvas.SetLeft(img, 10); // left Canvas.SetTop(img, 10); // top img.Width = 100; // width img.Height = 100; // height canvas.Children.Add(img); ``` > > 質問2 > > > 自分はよく知りませんが、ざっと調べた感じ、一次ソースでは > > プロパティの初期化はBeginInitとEndInitの呼び出しの間に行わなければなりません。 BitmapImageが初期化されると、プロパティの変更は無視されます。 > > > としか書かれていないので、必要性については書かれていません。 具体的になにをやっているかは、.NETのソースを読んでもらえれば良いのかなと思いました。 EndInitをトリガーにして、他の様々な処理が内部で行われるようです(画像をロードしたりだとか?)。 また、BeginInitやEndInitで何が行われるかはクラスによっても異なるようです。 > > 質問3 > > > 作成したいアプリケーションの性質によって変わってきますので、なんとも言えません。 (極端ですが例えばそれは.NETではなくMFCやWTLが正解の場合もあるかもわかりません。他にもUWPやQtが正解の場合もあるでしょう。) 各フレームワークのメリットデメリットをよく調べて選択してもらった方がよいです。 WPFはスケーリングに強かったり、何もせずとも高DPI対応(4.6.2からはモニタごとのDPIにも対応)してたりと、GUI面で多大な恩恵があるのも事実です。