热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

C#学习教程:字节数组为WriteableBitmap图像IValueConverter为WP7分享

字节数组为WriteableBitmap图像IValueConverter为WP7我一直在解决这个问题。我从我的数据库中获取图像作为byte[],我想将其转换为WritableBi

字节数组为WriteableBitmap图像IValueConverter为WP7

我一直在解决这个问题。 我从我的数据库中获取图像作为byte [],我想将其转换为WritableBitmap,所以我可以使用绑定在我的xaml页面上显示它。

我用这个:

public class ImageConverter : IValueConverter { ///  /// Converts a Jpeg byte array into a WriteableBitmap ///  public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { if (value is byte[]) { MemoryStream stream = new MemoryStream((Byte[])value); WriteableBitmap bmp = new WriteableBitmap(200, 200); bmp.LoadJpeg(stream); return bmp; } else return null; } ///  /// Converts a WriteableBitmap into a Jpeg byte array. ///  public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { throw new NotImplementedException(); } } 

第一个问题是它不起作用。 当它命中bmp.LoadJpeg(stream);时会抛出一个未指定的exceptionbmp.LoadJpeg(stream);

第二个问题是关于传递给WriteableBitmap构造函数的固定大小,我怎么知道来自db的照片大小? 我能以某种方式使它变得动态吗? 我想第二个问题是第一个问题的原因。

谢谢。

编辑

我也PictureDecoder.DecodeJpeg()像这样使用PictureDecoder.DecodeJpeg()

  MemoryStream stream = new MemoryStream((Byte[])value); WriteableBitmap bmp = PictureDecoder.DecodeJpeg(stream); return bmp; 

但它也没有用。 在这种情况下, PictureDecoder.DecodeJpeg假设为我创建bmp对象。 我仍然得到一个未指明的错误。 可能是我通过了流允许的最大长度?

我用它但它返回BitmapImage 。 你需要返回WriteableBitmap吗?

编辑:如评论中提到的Ritch,如果你确实需要返回WriteableBitmap add

 var writeableBitmap = new WriteableBitmap(bitmapImage); return writeableBitmap 

第二个问题是关于传递给WriteableBitmap构造函数的固定大小,我怎么知道来自db的照片大小?

创建BitmapImage后,您可以访问bitmapImage.PixelWidthbitmapImage.PixelHeight

  public class ByteArraytoImageConverter : IValueConverter { public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { if (value == null) return null; var byteBlob = value as byte[]; var ms = new MemoryStream(byteBlob); var bmi = new BitmapImage(); bmi.SetSource(ms); return bmi; } public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { throw new NotImplementedException(); } } 

感谢您的回答

似乎问题是来自数据库的流以某种方式被破坏了。 价值转换器实际上还可以。 我已将其更改为使用PictureDecoder.DecodeJpeg()因此它将更加干净和动态

上述就是C#学习教程:字节数组为WriteableBitmap图像IValueConverter为WP7分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—编程笔记

 public class ImageConverter : IValueConverter { ///  /// Converts a Jpeg byte array into a WriteableBitmap ///  public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { if (value is byte[]) { MemoryStream stream = new MemoryStream((Byte[])value); WriteableBitmap bmp = PictureDecoder.DecodeJpeg(stream); return bmp; } else return null; } ///  /// Converts a WriteableBitmap into a Jpeg byte array. ///  public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { throw new NotImplementedException(); } } 


推荐阅读
  • Redis底层数据结构之压缩列表的介绍及实现原理
    本文介绍了Redis底层数据结构之压缩列表的概念、实现原理以及使用场景。压缩列表是Redis为了节约内存而开发的一种顺序数据结构,由特殊编码的连续内存块组成。文章详细解释了压缩列表的构成和各个属性的含义,以及如何通过指针来计算表尾节点的地址。压缩列表适用于列表键和哈希键中只包含少量小整数值和短字符串的情况。通过使用压缩列表,可以有效减少内存占用,提升Redis的性能。 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • 本文介绍了C#中数据集DataSet对象的使用及相关方法详解,包括DataSet对象的概述、与数据关系对象的互联、Rows集合和Columns集合的组成,以及DataSet对象常用的方法之一——Merge方法的使用。通过本文的阅读,读者可以了解到DataSet对象在C#中的重要性和使用方法。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • 本文介绍了Oracle数据库中tnsnames.ora文件的作用和配置方法。tnsnames.ora文件在数据库启动过程中会被读取,用于解析LOCAL_LISTENER,并且与侦听无关。文章还提供了配置LOCAL_LISTENER和1522端口的示例,并展示了listener.ora文件的内容。 ... [详细]
  • 解决VS写C#项目导入MySQL数据源报错“You have a usable connection already”问题的正确方法
    本文介绍了在VS写C#项目导入MySQL数据源时出现报错“You have a usable connection already”的问题,并给出了正确的解决方法。详细描述了问题的出现情况和报错信息,并提供了解决该问题的步骤和注意事项。 ... [详细]
  • 怎么在PHP项目中实现一个HTTP断点续传功能发布时间:2021-01-1916:26:06来源:亿速云阅读:96作者:Le ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 本文介绍了在SpringBoot中集成thymeleaf前端模版的配置步骤,包括在application.properties配置文件中添加thymeleaf的配置信息,引入thymeleaf的jar包,以及创建PageController并添加index方法。 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • 关于我们EMQ是一家全球领先的开源物联网基础设施软件供应商,服务新产业周期的IoT&5G、边缘计算与云计算市场,交付全球领先的开源物联网消息服务器和流处理数据 ... [详细]
  • 本文详细介绍了Spring的JdbcTemplate的使用方法,包括执行存储过程、存储函数的call()方法,执行任何SQL语句的execute()方法,单个更新和批量更新的update()和batchUpdate()方法,以及单查和列表查询的query()和queryForXXX()方法。提供了经过测试的API供使用。 ... [详细]
  • 本文介绍了在mac环境下使用nginx配置nodejs代理服务器的步骤,包括安装nginx、创建目录和文件、配置代理的域名和日志记录等。 ... [详细]
author-avatar
帅宁
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有