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

C#学习教程:在C#中从字符串转换为Image分享

在C#中从字符串转换为Image我试图将Unicode字符串转换为C#中的图像。每次我运行它都会在这一行上出错ImageimageImage.FromStream(ms,true,

在C#中从字符串转换为Image

我试图将Unicode字符串转换为C#中的图像。 每次我运行它都会在这一行上出错

Image image = Image.FromStream(ms, true, true); 

说:ArgumentException未被用户代码处理。 参数无效。 任何想法为什么会这样? 以下是该function的其余部分。

 public Image stringToImage(string inputString) { byte[] imageBytes = Encoding.Unicode.GetBytes(inputString); MemoryStream ms = new MemoryStream(imageBytes, 0, imageBytes.Length); ms.Write(imageBytes, 0, imageBytes.Length); Image image = Image.FromStream(ms, true, true); return image; } 

Unicode不会编码您需要表示图像的所有可能字节序列。

byte[] – > String – > byte[]是一个转换,它不适用于许多给定的字节序列。 你必须在整个过程中使用一个byte []。

例如,如果您读取字节,将它们转换为UTF-16,那么字节序列可能会被丢弃为无效。 以下是UTF-16中无效字节序列的示例。

代码点U + D800到U + DFFF [编辑] Unicode标准永久保留这些代码点值,用于引导和跟踪代理的UTF-16编码,并且它们永远不会被分配一个字符,所以没有理由编码他们。 官方的Unicode标准说所有UTF格式,包括UTF-16,都不能编码这些代码点。

愿这可以帮到你:

 public Bitmap stringToImage(string inputString) { byte[] imageBytes = Encoding.Unicode.GetBytes(inputString); MemoryStream ms = new MemoryStream(imageBytes); return new Bitmap(ms); } 

取出写入MemoryStream的调用。 接受字节数组的构造函数调用会自动将字节数组的内容放入流中。 否则,您的流包含2个原始数据副本。 此外,对Write的调用将使流的位置保留在流的末尾,因此没有FromStream调用可以读取的数据。

所以它会是:

 public Image stringToImage(string inputString) { byte[] imageBytes = Encoding.Unicode.GetBytes(inputString); // Don't need to use the constructor that takes the starting offset and length // as we're using the whole byte array. MemoryStream ms = new MemoryStream(imageBytes); Image image = Image.FromStream(ms, true, true); return image; } 

你是从ldap中获得一个字符串的图像吗? 我很确定如果这是真的,字符串实际上是base64编码的,在这种情况下包含代表实际字符的字节,而不是图像数据。

你能发一下你正在收到的字符串吗?

如果是真的,你需要取字符串并通过un-base64’将其转换为byte [],然后使用字节数组来制作图像。 结合@ JonBenedicto的代码:

 public Image stringToImage(string inputString) { byte[] imageBytes = Convert.FromBase64String(inputString); MemoryStream ms = new MemoryStream(imageBytes); Image image = Image.FromStream(ms, true, true); return image; } 

使用字符串,您可能会丢失数据,我将发布示例,将图像转换为字节数组,将数组再次转换为图像,并在图像到字节数组之后,进行字符串和返回,而不会丢失数据。

  MemoryStream ms = new MemoryStream(); Image.FromFile(@"C:......img.jpg").Save(ms,ImageFormat.Jpeg); byte[] bytes = ms.ToArray(); MemoryStream ms1 = new MemoryStream(bytes); Image NewImage = Image.FromStream(ms1); NewImage.Save(@"C:......img1.jpg"); 

试试这个,它可能会帮助你生产出你需要的东西。

尝试转换为字符串并返回,更好地使用base64。

  MemoryStream ms = new MemoryStream(); Image.FromFile(@"C:......img.jpg").Save(ms,System.Drawing.Imaging.ImageFormat.Jpeg); byte[] bytes = ms.ToArray(); string byteString = Convert.ToBase64String(bytes); byte[] NewBytes = Convert.FromBase64String(byteString); MemoryStream ms1 = new MemoryStream(NewBytes); Image NewImage = Image.FromStream(ms1); 

这应该会给你你需要的结果。

  MemoryStream ms = new MemoryStream(); Image.FromFile(@"C:......img.jpg").Save(ms,ImageFormat.Jpeg); byte[] bytes = ms.ToArray(); string byteString = Convert.ToBase64String(bytes); 

然后当你将这个字符串传递给你的方法时……

上述就是C#学习教程:在C#中从字符串转换为Image分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—编程笔记

  public Image stringToImage(string inputString) { byte[] NewBytes = Convert.FromBase64String(inputString); MemoryStream ms1 = new MemoryStream(NewBytes); Image NewImage = Image.FromStream(ms1); return NewImage; } 


推荐阅读
  • 本文介绍了Swing组件的用法,重点讲解了图标接口的定义和创建方法。图标接口用来将图标与各种组件相关联,可以是简单的绘画或使用磁盘上的GIF格式图像。文章详细介绍了图标接口的属性和绘制方法,并给出了一个菱形图标的实现示例。该示例可以配置图标的尺寸、颜色和填充状态。 ... [详细]
  • Webpack5内置处理图片资源的配置方法
    本文介绍了在Webpack5中处理图片资源的配置方法。在Webpack4中,我们需要使用file-loader和url-loader来处理图片资源,但是在Webpack5中,这两个Loader的功能已经被内置到Webpack中,我们只需要简单配置即可实现图片资源的处理。本文还介绍了一些常用的配置方法,如匹配不同类型的图片文件、设置输出路径等。通过本文的学习,读者可以快速掌握Webpack5处理图片资源的方法。 ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • 本文介绍了C#中生成随机数的三种方法,并分析了其中存在的问题。首先介绍了使用Random类生成随机数的默认方法,但在高并发情况下可能会出现重复的情况。接着通过循环生成了一系列随机数,进一步突显了这个问题。文章指出,随机数生成在任何编程语言中都是必备的功能,但Random类生成的随机数并不可靠。最后,提出了需要寻找其他可靠的随机数生成方法的建议。 ... [详细]
  • 本文探讨了C语言中指针的应用与价值,指针在C语言中具有灵活性和可变性,通过指针可以操作系统内存和控制外部I/O端口。文章介绍了指针变量和指针的指向变量的含义和用法,以及判断变量数据类型和指向变量或成员变量的类型的方法。还讨论了指针访问数组元素和下标法数组元素的等价关系,以及指针作为函数参数可以改变主调函数变量的值的特点。此外,文章还提到了指针在动态存储分配、链表创建和相关操作中的应用,以及类成员指针与外部变量的区分方法。通过本文的阐述,读者可以更好地理解和应用C语言中的指针。 ... [详细]
  • 前景:当UI一个查询条件为多项选择,或录入多个条件的时候,比如查询所有名称里面包含以下动态条件,需要模糊查询里面每一项时比如是这样一个数组条件:newstring[]{兴业银行, ... [详细]
  • Java中包装类的设计原因以及操作方法
    本文主要介绍了Java中设计包装类的原因以及操作方法。在Java中,除了对象类型,还有八大基本类型,为了将基本类型转换成对象,Java引入了包装类。文章通过介绍包装类的定义和实现,解答了为什么需要包装类的问题,并提供了简单易用的操作方法。通过本文的学习,读者可以更好地理解和应用Java中的包装类。 ... [详细]
  • 纠正网上的错误:自定义一个类叫java.lang.System/String的方法
    本文纠正了网上关于自定义一个类叫java.lang.System/String的错误答案,并详细解释了为什么这种方法是错误的。作者指出,虽然双亲委托机制确实可以阻止自定义的System类被加载,但通过自定义一个特殊的类加载器,可以绕过双亲委托机制,达到自定义System类的目的。作者呼吁读者对网上的内容持怀疑态度,并带着问题来阅读文章。 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • 本文是一位90后程序员分享的职业发展经验,从年薪3w到30w的薪资增长过程。文章回顾了自己的青春时光,包括与朋友一起玩DOTA的回忆,并附上了一段纪念DOTA青春的视频链接。作者还提到了一些与程序员相关的名词和团队,如Pis、蛛丝马迹、B神、LGD、EHOME等。通过分享自己的经验,作者希望能够给其他程序员提供一些职业发展的思路和启示。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 本文讨论了clone的fork与pthread_create创建线程的不同之处。进程是一个指令执行流及其执行环境,其执行环境是一个系统资源的集合。在调用系统调用fork创建一个进程时,子进程只是完全复制父进程的资源,这样得到的子进程独立于父进程,具有良好的并发性。但是二者之间的通讯需要通过专门的通讯机制,另外通过fork创建子进程系统开销很大。因此,在某些情况下,使用clone或pthread_create创建线程可能更加高效。 ... [详细]
author-avatar
cocoa_小米多本_148
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有