首页 > 其他分享 >WPF中Image控件绑定数据源,解决图片被占用问题

WPF中Image控件绑定数据源,解决图片被占用问题

时间:2023-10-13 14:55:20浏览次数:38  
标签:控件 object 数据源 Image bitmapImage 绑定 new bmNew bmTemp

WPF中Image控件的数据源如果设置为路径,或者后台通过Image.FromFile来绑定,该图片将被占用,如要进行图片压缩、删除等操作则会报图片被占用的错;所以可以从内存中加载图片进行绑定。

以下为MVVMLight模式,首先增加一个图片路径值转换的类

 public class ImageConvert : IValueConverter
 {
     public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
     {
         try
         {
             string path = value.ToString();
             if (File.Exists(path))
             {
                 BinaryReader binaryReader = new BinaryReader(File.Open(path, FileMode.Open));
                 FileInfo fileInfo = new FileInfo(path);
                 byte[] bytes = binaryReader.ReadBytes((int)fileInfo.Length);
                 binaryReader.Close();
                 Bitmap bmTemp = new Bitmap(new MemoryStream(bytes));
                 Bitmap bmNew = new Bitmap(bmTemp.Width, bmTemp.Height, System.Drawing.Imaging.PixelFormat.Format32bppArgb);
                 bmNew.SetResolution(96, 96);
                 using (Graphics g = Graphics.FromImage(bmNew))
                 {
                     g.Clear(System.Drawing.Color.Transparent);
                     g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
                     g.DrawImage(bmTemp, new Rectangle(0, 0, bmNew.Width, bmNew.Height), 0, 0, bmTemp.Width, bmTemp.Height, GraphicsUnit.Pixel);
                     g.Dispose();
                 }
                 BitmapImage bitmapImage = new BitmapImage();
                 using (MemoryStream ms = new MemoryStream())
                 {
                     bmNew.Save(ms, System.Drawing.Imaging.ImageFormat.Png);

                     bitmapImage.BeginInit();
                     bitmapImage.StreamSource = ms;
                     bitmapImage.CacheOption = BitmapCacheOption.OnLoad;
                     bitmapImage.EndInit();

                     ms.Dispose();
                 }
                 return bitmapImage;
             }
             else
             {
                 return null;
             }
         }
         catch (Exception)
         {
             return null;
         }
     }

     public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
     {
         throw new NotImplementedException();
     }
 }

  View中的关键代码如下:

 <UserControl.Resources>
     <vc:ImageConvert x:Key="string2Img" />
 </UserControl.Resources>

<Grid>
    <Image
                Source="{Binding Path=ImagePath,Converter={StaticResource string2Img}}"
                Stretch="Fill" />
</Grid>

 最后,ViewModel中给ImagePath绑定值,ImagePath的值为图片的路径

标签:控件,object,数据源,Image,bitmapImage,绑定,new,bmNew,bmTemp
From: https://www.cnblogs.com/xiaomianyang/p/17762100.html

相关文章

  • Java SWT Image 图像 —— 透明度 alpha数组
    对于图像深度是2、4、8的图像,可以指定transparentPixel。对于直接图像,要使用alpha或者alpha数组,alpha值0到255,0表示完全透明的,数值越大表示越是不透明,255表示完全不透明,可以只是设置一个alpha值,作用于所有的像素点,也可以给所有的像素点设置自己的透明的值。 如: 的alpha的数组值为......
  • Java SWT Image 图像 —— mask
    原文链接:http://www.eclipse.org/articles/Article-SWT-images/graphics-resources.htmlPaletteDatapaletteData=newPaletteData(newRGB[]{newRGB(0,0,0),newRGB(255,255,255)});ImageDatasourceData=newImageData(32,32,1,paletteData);ImageDatamaskData=......
  • Java SWT Image 图像 —— 变灰、变亮变黑、旋转、反色、拉伸、透明叠加
    图像变灰图像变灰在桌面应用程序中有着广泛的应用。例如,一个图标被作为一个按钮的背景,我们需要一个灰色效果的图标作为按钮的背景来表示这个按钮处于禁用状态。在SWT中,基于已经存在的图像来创建一个具有灰色效果的图像,我们可以使用构造函数Image(Displaydisplay,Imageimage,in......
  • 将docker里的所有正在运行的docker容器commit成images镜像并推送至harbor仓库里
    脚本一需求:将本地服务器上正在运行的所有容器打包成镜像并上传至Harbor仓库下的指定项目里  #!/bin/bash#设置Harbor仓库的地址和凭据HARBOR_URL="192.168.1.55:88"HARBOR_USERNAME="admin"HARBOR_PASSWORD="Harbor12345"HARBOR_PROJECT="m55all-images"#登录到Harbor仓......
  • WPF使用Winform、ActiveX(OCX)控件
    一、调用Winform控件1、添加“WindowsFormsIntegration”程序集引用 2、在前端代码设计处使用命名控件代码:xmlns:wf="clr-namespace:System.Windows.Forms.Integration;assembly=WindowsFormsIntegration"示例图: 3、然后,就可以在XAML文件中这样使用WindowsFormsHo......
  • 大数据、数据挖掘、机器学习、数据分析等专业的数据源网站——案例数据下载
    现在的大学计算机开设了下面的几个方向:大数据、数据挖掘、机器学习、数据分析 但是,上面的   ================================= 数据分析方向推荐入门书: ......
  • 【论文阅读】MD vs FA: Adversarial learning for small object segmentation in infr
    WangH,ZhouL,WangL.Missdetectionvs.falsealarm:Adversariallearningforsmallobjectsegmentationininfraredimages[C]//ProceedingsoftheIEEE/CVFInternationalConferenceonComputerVision.2019:8509-8518.论文试图解决什么问题?解决红外小目标的目标......
  • 2023ICCV_Retinexformer: One-stage Retinex-based Transformer for Low-light Image
    一.Motivation(1)Retinex理论没有考虑到噪声,并且基于Retinex分解的网络通常需要很多阶段训练。(2)直接使用从CNN从低光图像到正常光图像的映射忽略了人类的颜色感知,CNN更适合捕获局部信息,对于捕获远程依赖和非局部自相似性方面存在局限。二.Contribution(1)设计了一个阶段......
  • Winform-选择类控件.ComboBox控件(下拉组合框控件)
    ComboBox控件用于在下拉组合框中显示数据第一部分是一个允许用户输入列表项的文本框第二部分是一个列表框,用户选择其中一个 1、创建只可以选择的下拉框 2、选中下拉组合框中可编辑部分的所有文本 ......
  • Firefly Image 2 Model 新增​功能
    FireflyImage2Model(Beta)现​已​可用通过​更高​质量​的​图像​和​插图​生成,​以及​自​定义​选项​和​改进​的​动态​范围,​更​快​地​实现​您​的​创意​愿景。立即​尝试FireflyImage2(Beta)轻松​尝试​不同​的​样式通过​将​现有​图......