MAUI应用从gRPC获取ByteString转Image报错:Image无FromStream定义
问题:MAUI应用中显示gRPC返回的ByteString图片报错
从gRPC服务获取到ByteString后,想要在MAUI应用中显示对应的图片,但始终报错无法运行,尝试多种方法均未解决。
当前使用的代码
using (var ms = new MemoryStream(bytes.ToByteArray())) { return Image.FromStream(ms); // FromStream 报错 }
尝试过的其他代码
MemoryStream ms = new MemoryStream(data); Image returnImage = System.Drawing.Image.FromStream(ms); Image x = (Bitmap)(new ImageConverter().ConvertFrom(bytes.ToByteArray()));
上述代码同样出现大量错误。
问题关键点
已引用System.Drawing但该引用呈灰色,检查后发现代码中的Image默认引用的是Microsoft.Maui.Controls.Image类,它和System.Drawing.Image并非同一类型,这是核心冲突所在。
解决方案
MAUI的Image控件需要绑定的是ImageSource类型,而非System.Drawing.Image,正确的转换方式如下:
方法1:直接从字节数组创建ImageSource
// 将ByteString转换为字节数组 byte[] imageBytes = bytes.ToByteArray(); // 创建ByteArrayImageSource并赋值给MAUI Image控件的Source属性 yourMauiImageControl.Source = ImageSource.FromByteArray(imageBytes);
方法2:通过流创建StreamImageSource
byte[] imageBytes = bytes.ToByteArray(); yourMauiImageControl.Source = new StreamImageSource { Stream = token => Task.FromResult(new MemoryStream(imageBytes)) };
说明
System.Drawing.Image是传统桌面框架(WinForms/WPF)的类型,MAUI不推荐直接使用,且MAUI的Image控件不支持该类型,这是之前代码报错的根本原因。System.Drawing引用呈灰色是因为MAUI项目中该包几乎没有实际作用,MAUI拥有独立的图像处理API。
内容的提问来源于stack exchange,提问作者John Harris
相关产品推荐
相关产品推荐

