2008-12-29 50 views
24

Tôi có một cửa sổ có tiêu đề trên đó. Khi người dùng chọn một lựa chọn từ danh sách thả xuống, hình ảnh tiêu đề có thể thay đổi. Vấn đề là khi tải hình ảnh, đó là một mờ, kéo dài, và pixelated. Đây là những tập tin PNG tôi đang làm việc với và họ nhìn tốt trước khi thiết lập nguồn động.Hình ảnh WPF Tự động thay đổi nguồn hình ảnh trong thời gian chạy

Đây là mã tôi đang sử dụng để thay đổi nguồn của hình ảnh.

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); 

Dưới đây là các chức năng trợ giúp.

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; 
    } 

Và XAML

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

Và đối với Ref:

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

Bất cứ ai có bất cứ ý tưởng có chuyện gì thế?

Trả lời

26

tôi có thể nghĩ đến hai điều:

tiên, hãy thử tải hình ảnh với:

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

Có lẽ vấn đề là với hình ảnh WinForm của thay đổi kích thước, nếu hình ảnh được kéo dài, hãy đặt Stretch trên điều khiển hình ảnh thành "Uniform" hoặc "UnfirofmToFill".

tùy chọn thứ hai là rằng có lẽ hình ảnh được không phù hợp với các lưới pixel, bạn có thể đọc về nó trên blog của tôi tại http://www.nbdtech.com/blog/archive/2008/11/20/blurred-images-in-wpf.aspx

+0

cảm ơn vì liên kết, bài đăng blog rất hay. – frameworkninja

2

Hãy thử Stretch = "UniformToFill" trên Image

+0

Nope mà không làm việc. –

10

Hey, đây là một loại xấu xí nhưng nó là một dòng duy nhất:

imgTitle.Source = new BitmapImage(new Uri(@"pack://application:,,,/YourAssembly;component/your_image.png")); 
+1

nếu bạn có hình ảnh của bạn trong một thư mục con đặt ico.Source = new BitmapImage (new Uri (@ "gói: // application: ,,,/YourAssembly; component/YourFolder/your_image.png")); –

4

Đây là cách nó hoạt động tốt đẹp đối với tôi. Trong tài nguyên cửa sổ, thêm hình ảnh.

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

Sau đó, mã sẽ như thế này.

Image img = new Image() 

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

"này" là đề cập đến đối tượng Window

2
Me.imgAddNew.Source = New System.Windows.Media.Imaging.BitmapImage(New Uri("/SPMS;component/Images/Cancel__Red-64.png", UriKind.Relative)) 
3

Giống như đối với tôi -> làm việc là:

string strUri2 = Directory.GetCurrentDirectory()[email protected]"/Images/ok_progress.png"; image1.Source = new BitmapImage(new Uri(strUri2));

+0

Trong mã sau đây BlackPlayerPic là loại hình ảnh. BitmapImage activeBlackPlayer = new BitmapImage (mới Uri ("C: \\ png \\ turn_black.png")); BlackPlayerPic.Source = activeBlackPlayer; –

Các vấn đề liên quan