C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: WPF での画像表示


(過去ログ 86 を表示中)

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■51509 / inTopicNo.1)  WPF での画像表示
  
□投稿者/ 雲 (12回)-(2010/07/08(Thu) 07:13:54)

分類:[.NET 全般] 

下記のようなやり方で、画像を読み込んで表示させようとしていますが、表示する際に
実際の画像のサイズよりも大きなサイズで表示されてしまいます。

FileStream stream = new FileStream( "test.jpg", FileMode.Open );
JpegBitmapDecoder jpg = new JpegBitmapDecoder( stream, BitmapCreateOptions.PreservePixelFormat, BitmapCacheOption.Default );
BitmapSource source = jpg.Frames[0];

image.Source = source;
image.Stretch = Stretch.None;

いろいろと見ていると、

jpg.Frames[0].Width

の段階で画像サイズが実際の画像のサイズよりも大きくなっていました。

で、


jpg.Frames[0].PixcelWidth

とすると、画像のサイズと同じ値が取得できます。

ただ、その値を

image.Source.Width = jpg.Frames[0].PixelWidth;

と設定しようとしても、プロパティが ReadOnly なために設定できない状態です。

こういう時には、どうすれば良いのでしょう?


引用返信 編集キー/
■51514 / inTopicNo.2)  Re[1]: WPF での画像表示
□投稿者/ Hongliang (667回)-(2010/07/08(Thu) 09:44:32)
PixelWidth/PixelHeight と Width/Height が異なる値になるのは DpiX/DpiY が 96 以外の値の場合ですが、BitmapSource で解像度を指定できるのは RenderTargetBitmap なり WriteableBitmap なりを新しく作った時のみで、何らかのプロパティやメソッドで変更できる物ではありません。
TransformedBitmap のチェーンを使って縦横 dpi/96 倍にスケールするって事も考えられますが、解像度やピクセルサイズによっては重い処理になるかもしれません。
Stretch.Uniform な Image の Width/Height を PixelWidth/PixelHeight に一致させる方が楽かと。
引用返信 編集キー/
■51560 / inTopicNo.3)  Re[2]: WPF での画像表示
□投稿者/ 雲 (13回)-(2010/07/09(Fri) 06:05:15)
No51514 (Hongliang さん) に返信
> Stretch.Uniform な Image の Width/Height を PixelWidth/PixelHeight に一致させる方が楽かと。

↑この方法でうまくいきました。

ただ、よくよく考えるとこれってWindows.Forms の時と同じですよね。

graphics.DrawImage(image, left, 0, image.Width, image.Height);
graphics.DrawImage(image, left, 0);

画像を表示する時に、画像サイズを指定ない場合、何故、勝手に拡大されるのか?を悩んだ記憶が
(今頃)蘇ってきました。

引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -