26

タイトルのあるウィンドウがあります。ユーザーがドロップダウンリストから選択肢を選択すると、タイトル画像が変わる可能性があります。問題は、画像が読み込まれるときに、ぼやけ、引き伸ばされ、ピクセル化されることです。これらは私が使用しているPNGファイルであり、ソースを動的に設定する前は見栄えがします。

これが、画像のソースを変更するために使用しているコードです。

string strUri2 = String.Format(@"pack://application:,,,/MyAssembly;component/resources/main titles/{0}", CurrenSelection.TitleImage);
Stream iconStream2 = App.GetResourceStream(new Uri(strUri2)).Stream;
imgTitle.Source = HelperFunctions.returnImage(iconStream2);

ヘルパー関数は次のとおりです。

    public static BitmapImage returnImage(Stream iconStream)
    {
        Bitmap brush = new Bitmap(iconStream);
        System.Drawing.Image img = brush.GetThumbnailImage(brush.Height, brush.Width, null, System.IntPtr.Zero);
        var imgbrush = new BitmapImage();
        imgbrush.BeginInit();
        imgbrush.StreamSource = ConvertImageToMemoryStream(img);
        imgbrush.CreateOptions = BitmapCreateOptions.PreservePixelFormat;
        imgbrush.EndInit();
        var ib = new ImageBrush(imgbrush);
        return imgbrush;
    }

    public static MemoryStream ConvertImageToMemoryStream(System.Drawing.Image img)
    {
        var ms = new MemoryStream();
        img.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
        return ms;
    }

そしてXAML

            <Image x:Name="imgTitle" HorizontalAlignment="Left" VerticalAlignment="Bottom" Grid.Column="1" Grid.Row="1" Stretch="None" d:IsLocked="False"/>

そして参照のために:

xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 

誰かが何が起こっているのか考えがありますか?

4

6 に答える 6

28

次の 2 つのことが考えられます。

まず、次のようにイメージをロードしてみてください。

string strUri2 = String.Format(@"pack://application:,,,/MyAseemby;component/resources/main titles/{0}", CurrenSelection.TitleImage);
imgTitle.Source = new BitmapImage(new Uri(strUri2));

画像が引き伸ばされている場合、画像コントロールの Stretch を「Uniform」または「UnfirofmToFill」に設定すると、WinForm の画像サイズ変更に問題がある可能性があります。

2 番目のオプションは、画像がピクセル グリッドに合わせられていない可能性があります。これについては、 http://www.nbdtech.com/blog/archive/2008/11/20/blurred-images-in-の私のブログで読むことができます。 wpf.aspx

于 2008-12-29T08:51:09.133 に答える
10

ねえ、これはちょっと醜いですが、1行だけです:

imgTitle.Source = new BitmapImage(new Uri(@"pack://application:,,,/YourAssembly;component/your_image.png"));
于 2009-09-11T21:25:23.113 に答える
4

これが私にとってそれがどのように美しく機能したかです。ウィンドウリソースで画像を追加します。

   <Image x:Key="delImg" >
    <Image.Source>
     <BitmapImage UriSource="Images/delitem.gif"></BitmapImage>
    </Image.Source>
   </Image>

次に、コードは次のようになります。

Image img = new Image()

img.Source = ((Image)this.Resources["delImg"]).Source;

「これ」はWindowオブジェクトを指します

于 2009-11-19T05:08:41.513 に答える
3

私のように->働くことは:

string strUri2 = Directory.GetCurrentDirectory()+@"/Images/ok_progress.png"; image1.Source = new BitmapImage(new Uri(strUri2));

于 2011-03-08T16:23:55.660 に答える
3
Me.imgAddNew.Source = New System.Windows.Media.Imaging.BitmapImage(New Uri("/SPMS;component/Images/Cancel__Red-64.png", UriKind.Relative))
于 2010-09-18T20:07:07.463 に答える
2

画像で Stretch="UniformToFill" を試してください

于 2008-12-29T06:04:48.177 に答える