|
■No51445 (Hongliang さん) に返信 > もし RenderTransform に ScaleTransform を適用することで拡大しているのなら当然ですが。レンダリングの際のみ拡大するわけですから、親要素が子要素をレイアウトするときの考慮の対象外です。Width/Height を直接操作するか、LayoutTransform を使うかしないといけません。
これ。WindowsForm の時の経験から必要なことだとは思っていたのですが、image.Width をすると値が入っていない(NaN)だったのでやらなくても良いのかと 勝手に思っていました(image の Width と Height を Auto にしたのが原因?)。
>>ここも、拡大方法はBitmapScalingModeを使うことで指定できました。どこかの Q&A でWPFにはそういうプロパティはない。と書いてあったのを >>鵜呑みにしていました。 > ちなみに、NearestNeighbor は .NET 3.0 SP1 で追加されたメンバです。それまではスケーリングに最近傍補完を使う方法は(WriteableBitmap 使って自前で各ピクセルごとに拡大するようなのを除けば)ありませんでした。
了解です。最初は無かった理由は、想像もつきませんが。。。
ご想像通り、拡大をRenderTransformにScaleTransform 適用したのですが、結構、コード量も少ないし処理も(Core2Quad)高速でびっくりしました。 WindowsForm の時の苦労は何だったのか?と言いたい。
ちょっと、WPF で遊んでみようという気になってきました。
ありがとうございました。
----------------------------------------------------------- 参考:こんな感じで拡大を指定しています。 -----------------------------------------------------------
TransformGroup group = new TransformGroup();
group.Children.Add( new ScaleTransform() ); group.Children.Add( new TranslateTransform()) ;
// 拡大縮小 ScaleTransform scale = (ScaleTransform)group.Children[0]; scale.ScaleX = 1.0; scale.ScaleY = 1.0;
// 平行移動 TranslateTransform translate = (TranslateTransform)group.Children[1]; translate.X = 0; translate.Y = 0;
image.RenderTransform = group; /////////////////////////////////////////////////////////////
// 拡大方法をニアレストネイバーに設定 RenderOptions.SetBitmapScalingMode( image, BitmapScalingMode.NearestNeighbor );
|