【问题标题】:.net core: How to convert byte array to image?.net core:如何将字节数组转换为图像?
【发布时间】:2022-01-27 18:31:54
【问题描述】:

我想将字节数组转换为图像。我在 StackOverFlow 中搜索了很多帖子,找到了下面的代码。

public Image ByteArrayToImage(byte[] byteArrayIn)
{
    MemoryStream ms = new MemoryStream(byteArrayIn);
    Image returnImage = Image.FromStream(ms); //  <-- Error here
    return returnImage;
}

但我在 Image.FromStream 中得到一个错误是 'Image' 不包含 'FromStream' 的定义 并且找不到任何有关如何修复的信息这个。
有一个用户had the same error 9 多年前和我一样,但仍然没有答案。
我找到了一种方法是:

public Image ByteArrayToImage(byte[] byteArrayIn)
{
    MemoryStream ms = new MemoryStream(byteArrayIn);
    Image returnImage = System.Drawing.Image.FromStream(ms); // <-- Add System.Drawing. here
    return returnImage;
}

还有一种方式:

public Image ByteArrayToImage(byte[] byteArrayIn)
{
    MemoryStream ms = new MemoryStream(byteArrayIn);
    System.Drawing.Image returnImage = System.Drawing.Image.FromStream(ms); // <-- Add System.Drawing. here
    return returnImage;  //  <-- Error here
}

但两种方式都会产生一个新错误:无法将类型“System.Drawing.Image”隐式转换为“Repository.Entities.Image”
这是我在 Repository.Entities 中的 图像文件

public partial class Image
{
    public int Id { get; set; }
    public int? IdObj { get; set; }
    public string Url { get; set; }
    public sbyte? Thumbnail { get; set; }
    public string Type { get; set; }
}

如何解决?期待收到答复。

【问题讨论】:

  • 您的Image 类与System.Drawing.Image 类完全无关。
  • 您在 System.Drawing.Image 之间感到困惑
  • 目前尚不清楚您要达到的目标。你为什么还要研究 System.Drawing?
  • 抱歉,如果我的问题相当愚蠢和不清楚。我在 System.Drawing.ImageRepository.Entities.Image 之间感到困惑。下面的答案可以帮助我理解和解决这个问题。

标签: c# asp.net-core


【解决方案1】:

在您的ByteArrayToImage 函数定义中,您说您将返回一个Repository.Entities.Image 类型的类实例,但在函数体内您将返回一个System.Drawing.Image 类型的类实例。

您可以将另一个属性添加到您的Repository.Entities.ImageSystem.Drawing.Image 并在函数中进行设置:

public partial class Image
{
    public int Id { get; set; }
    public int? IdObj { get; set; }
    public string Url { get; set; }
    public sbyte? Thumbnail { get; set; }
    public string Type { get; set; }
    public System.Drawing.Image MyImage{get; set; }
}

public Repository.Entities.Image ByteArrayToImage(byte[] byteArrayIn)
{
    MemoryStream ms = new MemoryStream(byteArrayIn);
    System.Drawing.Image returnImage = System.Drawing.Image.FromStream(ms); 
    return new Repository.Entities.Image {
        MyImage= returnImage
    }
}

现在您可以在代码中使用您自己的 Image 类(如果类型为 Repository.Entities.Image)的 .MyImage 属性(类型为 System.Drawing.Image)。

此外,我总是喜欢将我的类命名为不同于预定义类的名称(例如图像、文档、路径...等)。如果您打算使用有冲突的名称,最好使用完整的命名空间来防止类混淆。

【讨论】:

  • 非常感谢您的回答。
猜你喜欢
  • 1970-01-01
  • 2011-04-17
  • 2011-06-01
  • 2023-03-09
  • 1970-01-01
相关资源
最近更新 更多