精华内容
下载资源
问答
  • 2017-08-21 18:50:48

    1.首先要添加个资源文件。

    2.在跳出来的Resource1.resx中先选图像。再在添加资源里选添加现有文件,将要用到的图片加进去。

    3.其次再解决方案中点一下我们添加的图片,在下面的属性面板中选择 高级-生成操作-Resource

    4.最后在XAML中写上<Image Source="/train2;component/WPF.PNG" />

                                   或者:<Image Source="/1.png" />


    就好啦!


    更多相关内容
  • 1. 使用Source属性显示图片UI 添加Image控件 <Image x:Name="ImageViewer1" Height="100" Width="200"/>后台代码给Source属性赋值ImageViewer1.Source = new BitmapImage(new Uri(@"Images\VS2015.jpg", UriK

    Image控件可以显示 .bmp, .gif, .ico, .jpg, .png, .wdp and .tiff 格式的图片文件。

    1. 使用Source属性显示图片

    UI 添加Image控件

    <Image x:Name="ImageViewer1" Height="100" Width="200"/>
    

    后台代码给Source属性赋值

    ImageViewer1.Source = new BitmapImage(new Uri(@"Images\\VS2015.jpg", UriKind.Relative));
    

    效果图如下:

    动态切换Source 指定的文件,使用OpenFileDialog 类来选择图片源文件

    首先需要添加System.Windows.Forms的引用,来选择磁盘上其它图片文件来展示

    private void btnUrl_Click(object sender, RoutedEventArgs e)
            {
    
                OpenFileDialog dlg = new OpenFileDialog();
    
                dlg.InitialDirectory = "c:\\";
    
                dlg.Filter = "Image files (*.jpg)|*.jpg|All Files (*.*)|*.*";
    
                dlg.RestoreDirectory = true;
    
                if (dlg.ShowDialog() == System.Windows.Forms.DialogResult.OK)
    
                {
    
                    string selectedFileName = dlg.FileName;
    
                    txtFile.Text = selectedFileName;
    
                    BitmapImage bitmap = new BitmapImage();
    
                    bitmap.BeginInit();
    
                    bitmap.UriSource = new Uri(selectedFileName);
    
                    bitmap.EndInit();
    
                    ImageViewer1.Source = bitmap;
    
                }
    
            }
    

    上述方法需要运行代码才能展示图片的。

    2. 直接在WPF设计UI上展示图片

    直接在XAML代码中

    效果如下:

    直接展示在界面上,无须运行代码。

    可以设置图片显示的宽度和高度。

    <Image x:Name="ImageViewer3" Source="Images\\USA.png" Width="100" Height="100"/>
    

    效果如下:

    使用BitmapImage方式

    <Image Width="100">
        <Image.Source>
          <BitmapImage DecodePixelWidth="100"  UriSource="Images\\USA.png" />
        </Image.Source>
    </Image>
    

    3.动态添加Image控件,并显示图片

    <StackPanel x:Name="sp1" Grid.Row="0" Grid.Column="2" Margin="5">
       <Button x:Name="btnDynamic" Click="btnDynamic\_Click">动态加载</Button>
     </StackPanel>
    

    后台代码:

    private void btnDynamic_Click(object sender, RoutedEventArgs e)
    {

        // Create Image and set its width and height 
        Image dynamicImage = new Image();
        dynamicImage.Width = 300;
        dynamicImage.Height = 200;
        
        // Create a BitmapSource 
        BitmapImage bitmap = new BitmapImage();
        bitmap.BeginInit();
        bitmap.UriSource = new Uri(@"C:\\Users\\WPF加载图片文件\\WpfApp1\\Images\\VS2015.png");
        bitmap.EndInit();
    
        // Set Image.Source 
        dynamicImage.Source = bitmap;
        // Add Image to Window 
        sp1.Children.Add(dynamicImage);
    }
    

    效果如下:

    展开全文
  • 10、wpf显示图片方式一: Image控件

    千次阅读 2022-04-07 14:45:04
    整理下wpf image控件显示图片的方式,分为本地图片和内存图片(来自于网络交互中的图片

    前言:整理下wpf image控件显示图片的方式,分为本地图片和内存图片(来自于网络交互中的图片)

    一、Image

    命名空间:System.Windows.Controls

    程序集:PresentationFramework.dll

    表示用于显示图像的控件,这个图像一般就是指我们本地文件存储的照片或来自于网络请求中的照片资源。

    [System.Windows.Localizability(System.Windows.LocalizationCategory.None, Readability=System.Windows.Readability.Unreadable)]
    public class Image : System.Windows.FrameworkElement, System.Windows.Markup.IUriContext

    继承 Object → DispatcherObject → DependencyObject → Visual → UIElement →

    FrameworkElement → Image

    Image类可用于加载以下图像类型: .bmp、.gif、.ico、.jpg、.png、wdp 和 tiff。

    二、 Image赋值-本地图像资源

    Image赋值方式有多种,这里分为本地图像资源赋值和内存(网络请求图像资源)

    查看Image的属性可以看到,有一个Source属性,其类型为ImageSource类型

            //
            // 摘要:
            // 获取或设置图像的 System.Windows.Media.ImageSource。
            //
            // 返回结果:
            // 所绘制图像的源。 默认值为 null。
            public ImageSource Source { get; set; }

    导航到ImageSource类,可以看到他在Media名下,不是在Drawing名下,说明是一种多媒体文件格式。因为是一个抽象类,我们不能直接使用他,需要使用他的实现类。同时他有个ToString方法,所以在XAML中经常为Image的Source属性附上一个string(本地图片地址)就可以。

    2.1 XAML引用资源

        <Grid>
            <Grid.RowDefinitions>
                <RowDefinition Height="*"/>
                <RowDefinition Height="*"/> 
            </Grid.RowDefinitions> 
            <Image Source="{Binding ImgPath}"/>
            <Image Grid.Row="1" Source="pack://application:,,,/Resource/ButtonClick_16x.png"/>
        </Grid>
        //踩坑:Source这里使用的相对位置,但是如果不加"pack://application:,,,"就不能显示成功,具体的参考这篇博客:https://www.cnblogs.com/g120/p/4688101.html
        //code-behind
        public string ImgPath { get; set; }
        public MainWindowViewModel()
        {
            ImgPath = "pack://application:,,,/Resource/Brush_16x.png";
        } 

    2.2 ImageSource方式--用代码引用资源

    前面说了,ImageSource是一个抽象类,不能直接使用他,而是使用他的继承类来代替,查阅MSDN如下:

     BitmapSource(也是个抽象类)派生自ImageSource,就用它的子类BitmapImage来实现了

    //code-behind
    image.Source = new BitmapImage(new Uri("imgPath", UriKind.Absolute));

    三、Image赋值-内存(网络请求资源)

    当图像来自于摄像头或者屏幕截图或者网页图片时,就需要在内存中进行操作。WPF的Image控件的Source属性的类型为ImageSource,只要是继承自ImageSource的对象都可以赋值给Source属性,前面讲过BitmapImage继承自BitmapSource,而BitmapSource又继承自ImageSource,因此为了能够将内存中的Bitmap位图显示在Image控件中,需要将Bitmap转换为ImageSource类型。

    转换方式有多种,笔者这里将查询到的三种方式做下介绍。

    3.1 Bitmap类定义

    命名空间:System.Drawing

    程序集:System.Drawing.dll

    封装 GDI+ 位图,此位图由图形图像及其属性的像素数据组成。 Bitmap 是用于处理由像素数据定义的图像的对象。

    [System.Runtime.InteropServices.ComVisible(true)]
    [System.Serializable]
    public sealed class Bitmap : System.Drawing.Image

    继承 Object→MarshalByRefObject→Image→Bitmap

    属性 ComVisibleAttribute SerializableAttribute

    3.2 WriteableBitmap

    这种方式不安全,有可能会把内存搞炸,慎用。个人理解是将bitmap中数据导入到WriteableBitmap中,然后再赋值给Image使用。

     

    因为是从bitmap导数据到WriteableBitmap中,因此需要创建一个与Bitmap大小相同,像素格式兼容的WriteableBitmap。

    WriteableBitmap wb = new WriteableBitmap(bitmap.Width, bitmap.Height, 0, 0, System.Windows.Media.PixelFormats.Bgra32, null);
    

     然后调用Bitmap的LockBits获取其内部的图像数据,通过WritePixels的方式写入WriteableBitmap,这样即完成了转换。

    var data = bitmap.LockBits(new System.Drawing.Rectangle(new System.Drawing.Point(0, 0), bitmap.Size), System.Drawing.Imaging.ImageLockMode.ReadOnly, src.PixelFormat);
    
    wb.WritePixels(new Int32Rect(srcRect.X, srcRect.Y, srcRect.Width, srcRect.Height), data.Scan0, data.Height * data.Stride, data.Stride, destinationX, destinationY);
    bitmap.UnlockBits(data);
    
    //将Bitmap 转换成WriteableBitmap 
    public static WriteableBitmap BitmapToWriteableBitmap(System.Drawing.Bitmap src)
    {
        var wb = CreateCompatibleWriteableBitmap(src);
        System.Drawing.Imaging.PixelFormat format = src.PixelFormat;
        if (wb == null)
        {
            wb = new WriteableBitmap(src.Width, src.Height, 0, 0, System.Windows.Media.PixelFormats.Bgra32, null);
            format = System.Drawing.Imaging.PixelFormat.Format32bppArgb;
        }
        BitmapCopyToWriteableBitmap(src, wb, new System.Drawing.Rectangle(0, 0, src.Width, src.Height), 0, 0, format);
        return wb;
    }
    //创建尺寸和格式与Bitmap兼容的WriteableBitmap
    public static WriteableBitmap CreateCompatibleWriteableBitmap(System.Drawing.Bitmap src)
    {
        System.Windows.Media.PixelFormat format;            
        switch (src.PixelFormat)
        {
            case System.Drawing.Imaging.PixelFormat.Format16bppRgb555:
                format = System.Windows.Media.PixelFormats.Bgr555;
                break;
            case System.Drawing.Imaging.PixelFormat.Format16bppRgb565:
                format = System.Windows.Media.PixelFormats.Bgr565;
                break;
            case System.Drawing.Imaging.PixelFormat.Format24bppRgb:
                format = System.Windows.Media.PixelFormats.Bgr24;
                break;
            case System.Drawing.Imaging.PixelFormat.Format32bppRgb:
                format = System.Windows.Media.PixelFormats.Bgr32;
                break;           
            case System.Drawing.Imaging.PixelFormat.Format32bppPArgb:
                format = System.Windows.Media.PixelFormats.Pbgra32;
                break;            
            case System.Drawing.Imaging.PixelFormat.Format32bppArgb:
                format = System.Windows.Media.PixelFormats.Bgra32;
                break;
            default:
                return null;
        }
        return new WriteableBitmap(src.Width, src.Height, 0, 0, format, null);
    }
    //将Bitmap数据写入WriteableBitmap中
    public static void BitmapCopyToWriteableBitmap(System.Drawing.Bitmap src, WriteableBitmap dst, System.Drawing.Rectangle srcRect, int destinationX, int destinationY, System.Drawing.Imaging.PixelFormat srcPixelFormat)
    {
        var data = src.LockBits(new System.Drawing.Rectangle(new System.Drawing.Point(0, 0), src.Size), System.Drawing.Imaging.ImageLockMode.ReadOnly, srcPixelFormat);
        dst.WritePixels(new Int32Rect(srcRect.X, srcRect.Y, srcRect.Width, srcRect.Height), data.Scan0, data.Height * data.Stride, data.Stride, destinationX, destinationY);
        src.UnlockBits(data);
    }
    
    

    3.3 Imaging.CreateBitmapSourceFromHBitmap

            [DllImport("gdi32.dll", SetLastError = true)]
    
            private static extern bool DeleteObject(IntPtr hObject);
            /// <summary>
            /// 从bitmap转换成ImageSource
            /// </summary>
            /// <param name="icon"></param>
            /// <returns></returns>
            public static ImageSource ChangeBitmapToImageSource(Bitmap bitmap)
            {
                //Bitmap bitmap = icon.ToBitmap();
                IntPtr hBitmap = bitmap.GetHbitmap();
                ImageSource wpfBitmap = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(
                    hBitmap,
                    IntPtr.Zero,
                    Int32Rect.Empty,
                    BitmapSizeOptions.FromEmptyOptions());
                if (!DeleteObject(hBitmap))
                {
                    throw new System.ComponentModel.Win32Exception();
                }
                //一定要卸载IntPtr,否则内存泄漏很快就没有内存了。网上有人说这个方法有时不能卸载掉,我短时间测试是能够及时卸载掉内存的。需要说明的是:DeleteObject()方法不会影响imgSource和bmp中的数据,也就是DeleteObject()执行过后,imgSource和bmp中的图像数据依然完整地存在。为了能使用DeleteObject方法,需要声明来自于gdi32的外部函数 [DllImport("gdi32")]static extern int DeleteObject(IntPtr o),参考MSDN说明https://msdn.microsoft.com/zh-tw/library/1dz311e4(v=vs.80).aspx?cs-save-lang=1&cs-
    
                return wpfBitmap;
            }

    3.4 MemoryStream

    先将Bitmap数据Save到Memory Stream中,然后再用MemoryStream将其转换为字节数组,再利用MemoryStream来赋值给BitmapImage的StreamSource属性,从而间接将Bitmap对象转换为BitmapImage对象

    private BitmapImage BitmapToBitmapImage(System.Drawing.Bitmap bitmap)
    {
        Bitmap b = new Bitmap(bCode);
        MemoryStream ms = new MemoryStream();
        b.Save(ms, System.Drawing.Imaging.ImageFormat.Bmp);
        byte[] bytes = ms.GetBuffer();  //byte[]   bytes=   ms.ToArray(); 这两句都可以
        ms.Close();
        //Convert it to BitmapImage
        BitmapImage image = new BitmapImage();
        image.BeginInit();
        image.StreamSource = new MemoryStream(bytes);
        image.EndInit();
    
        return image ;
    }

    引用文章:C# wpf Bitmap转换成WriteableBitmap(BitmapSource)的方法_Alfred-N的博客-CSDN博客

    使用不安全代码将 Bitmap 位图转为 WPF 的 ImageSource 以获得高性能和持续小的内存占用 - walterlvWPF 使用不安全代码快速从数组转 WriteableBitmap

     

    展开全文
  • WPF使用Image控件显示图片

    万次阅读 多人点赞 2015-08-27 17:46:32
    WPF Image 控件的一点简单使用

         刚接触WPF,很多地方都不懂,就把自己遇到的一些问题记录下来,以便日后回过头来看看。

           开始使用Image控件,不知道怎么去显示图片,在同事指导下知道了BitmapImage 类,用来显示在Image中显示图片,按F1进入帮助文档,找到相关的定义:

    	
            // Create the image element.
    	Image simpleImage = new Image();    
    	simpleImage.Width = 200;
    	simpleImage.Margin = new Thickness(5);
    
    	// Create source.
    	BitmapImage bi = new BitmapImage();
    	// BitmapImage.UriSource must be in a BeginInit/EndInit block.
    	bi.BeginInit();
    	bi.UriSource = new Uri(@"/sampleImages/cherries_larger.jpg",UriKind.RelativeOrAbsolute);
    	bi.EndInit();
    	// Set the image source.
    	simpleImage.Source = bi;
        建立一个WPF项目,在工具箱中拖出一个Imag

    e控件
        
        选择一个合适的图片,按照主窗口Load事件中写自己的代码
       
            private void Window_Loaded(object sender, RoutedEventArgs e)
            {
    	        BitmapImage bi = new BitmapImage();
    	        // BitmapImage.UriSource must be in a BeginInit/EndInit block.
    	        bi.BeginInit();
    	        bi.UriSource = new Uri(@"F:\1.jpg",UriKind.RelativeOrAbsolute);
    	        bi.EndInit();
    	        image1.Source = bi;
            }

        图片如下:
    	
        看到图片整个人都不好了。偷笑
        后面看到了一篇文章,觉得说的挺好的。http://www.cnblogs.com/zydf/p/3141735.html
        的确处理单张图片挺好用的,担当处理多张的时候,就要考虑内存的问题了。先把图片缓存成二进制,这样可以释放对图片文件资源的占用,后面代码执行效率高;
        就自己做出了下面的修改:
           
            private string path = @"F:\1.jpg";
            private void Window_Loaded(object sender, RoutedEventArgs e)
            {
                using (BinaryReader loader = new BinaryReader(File.Open(path, FileMode.Open)))
                {
                    FileInfo fd = new FileInfo(path);
                    int Length = (int)fd.Length;
                    byte[] buf = new byte[Length];
                    buf = loader.ReadBytes((int)fd.Length);
                    loader.Dispose();
                    loader.Close();
    
    
                    //开始加载图像
                    BitmapImage bim = new BitmapImage();
                    bim.BeginInit();
                    bim.StreamSource = new MemoryStream(buf);
                    bim.EndInit();
                    image1.Source = bim;
                    GC.Collect(); //强制回收资源
                }
    
    
                //BitmapImage bi = new BitmapImage();
                 BitmapImage.UriSource must be in a BeginInit/EndInit block.
                //bi.BeginInit();
                //bi.UriSource = new Uri(@"F:\1.jpg",UriKind.RelativeOrAbsolute);
                //bi.EndInit();
                //image1.Source = bi;
            }

    	图片效果:
    	
    	它又出来了!哭
    	当然,后面就可以做更多的事情啦。

    展开全文
  • WPF中,Image控件不支持Bitmap类型,但支持ImageSource类型,因此需要进行类型转换。 转换类: publicstaticclassBitmapSourceConvert { ///<summary> ///Delete a GDI object ///</summary> /...
  • WPF显示图片的控件为Image控件。以下分别介绍显示图片文件和内存位图的使用方法,主要介绍如何赋予Image对象的Source属性值。 (一)使用图片文件 方式一: &lt;Image Width="320" Source="...
  • 主要介绍了WPFimage控件用鼠标拖拽出矩形的实现方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
  • 学习WPF时用到Image控件显示图片使用绝对路径时显示正常,改变为相对路径出错。 网上查询相关问题后得知图片若用相对路径,需改其属性。 相关操作如下: 1、在工程中添加一个文件夹,用于存放图片(可选,便于管理...
  • public static BitmapImage LoadImageFreeze(string imagePath){try{bitmap = new BitmapImage();if (File.Exists(imagePath)){bitmap.BeginInit();bitmap.CacheOption = BitmapCacheOption.OnLoad;...
  • 因为图片不能压缩,必须得完全放到Image控件上(后面因为还会对图片进行缩放,平移,绘制标记等一系列操作,就相当于一个简易的地图的功能)   下面是WPF的示例,一个循环 <code class="language-cs">private void ...
  • wpf image控件循环显示图片 以达到动画效果 问题及解决方案
  • 原因一:文字和图片同时显示,又不是什么点击事件或者按钮,需要加入StackPanel,这个只有WPF支持 <StackPanel VerticalAlignment="Center" Orientation="Vertical"> <Image Source="/Abc;component/...
  • WPF Image控件的初步使用

    千次阅读 2021-09-11 11:31:00
    ImageWpf中用以展示图像的控件,本文介绍其基本功能。
  • Image控件图片显示问题 选择图片,右键选择属性,在高级里 复制到输出目录修改为—始终复制 生成操作修改为—内容 基本上图片就可以显示了 代码: Images.Source = new BitmapImage(new Uri("Resources/1.jpg", ...
  • Creat on 2015-09-05 C#的WPF中的Image控件中载入图片的方法 独立观察员 2014.06.23 最近在做学校短学期课程"软件工程-软件项目管理与开发实践"的作业选择用...开始时我按照 WPF--Image控件动态显示图片问题笔记 里写
  • WPF Image控件显示网络图片

    千次阅读 2019-08-28 11:32:33
    直接上代码,xaml代码就贴一个Image控件: <Image Name="image" HorizontalAlignment="Left" Height="100" VerticalAlignment="Top" Width="100"/> 加载代码也很简单: public ImportWindow() { ...
  • 1.将要使用图片或者Icon文件放入工程下。 2.右键->添加->现有项-> 选中要添加的图片或者Icon。 3.右键选中图片-> 属性-> 在面板中选择“生成操作”->将内容修改为“Resource”。 4.引用:<...
  • image.Source = new BitmapImage(new Uri(“图片地址”, UriKind.RelativeOrAbsolute));
  • wpf 获取Image图片并保存到本地 var encoder = new PngBitmapEncoder (); encoder.Frames.Add (BitmapFrame.Create((BitmapSource)image.Source)); FileStream file = new FileStream ("../../102.png",FileMode...
  • 前台image控件代码 1、进行宽度、高度Binding设置 后台image控件代码 1、获取图片存放路径path 2、通过BitmapImage进行图片初始化 3、完成图片绑定
  • WPF 保存image控件里的图片 原文:WPF 保存image控件里的图片 string ProImgPath = ProcessPath + name + ".png";//要保存的图片的地址,包含文件名 BitmapSource BS = (BitmapSource)ImgPro.Source;...
  • WPF(C#)中获取远端服务器验证码图片,并显示Image控件上。无需将图片存储到本地,可以支持验证码无限次更新,不会出现不出图的情况。
  • WPFImage控件图片不能显示的问题解决
  • Winform使用自定义WPF控件设置图片透明度样例: 点击1加载图片,点击2设置透明度0.1,点击3设置透明度0.9;
  • ![图片说明](https://img-ask.csdn.net/upload/202001/25/1579929968_187227.png) 用image控件加载图片之后想...我想做成放大之后,image控件显示图片局部,可以通过鼠标去移动查看特地部位。 希望可以给我点建议
  • C# WPF Image控件使用

    2020-12-09 10:29:14
    WPFImage控件显示静态的图像 string path= System.Environment.CurrentDirectory+ "\\logo.png";//获取图片绝对路径 BitmapImage image = new BitmapImage(new Uri(path, UriKind.Absolute));//打开图片 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 7,640
精华内容 3,056
关键字:

wpf使用image控件显示图片