如何在C#中获得不可为空的T以便在函数中使用它?

比约恩·尼克尔(Bjorn Nickel)

这段代码有错误。

    private void Save<T>(string file)
        where T : struct, IPixel<T>
    {
        Image<T> image = Image.LoadPixelData<T>(
            _image.Data, _image.Width, _image.Height);
        image.Save(file);
    }

CS8377 C#类型“ T”必须是非空值类型,以及任何嵌套级别的所有字段,才能将其用作泛型类型或方法中的参数

我使用C#7.3,.Net-Framework 4.6和WPF,此代码适用于Winforms

[编辑]图片来自Sixlabors

using SixLabors.ImageSharp;
using SixLabors.ImageSharp.PixelFormats;
using System;
using System.IO;

namespace DDSReader
{
public class LoadImage
{
    private readonly Pfim.IImage _image;

    public byte[] Data
    {
        get
        {
            if (_image != null)
                return _image.Data;
            else
                return new byte[0];
        }
    }

    public LoadImage(string file)
    {
        _image = Pfim.Pfim.FromFile(file);
        Process();
    }

    public LoadImage(Stream stream)
    {
        if (stream == null)
            throw new Exception("DDSImage ctor: Stream is null");

        _image = Pfim.Dds.Create(stream, new Pfim.PfimConfig());
        Process();
    }

    public LoadImage(byte[] data)
    {
        try
        {
            if (data == null || data.Length <= 0)
                throw new Exception("DDSImage ctor: no data");

            _image = Pfim.Dds.Create(data, new Pfim.PfimConfig());
            Process();
        }
        catch { }
    }

    public void Save(string file)
    {
        try
        {
            if (_image.Format == Pfim.ImageFormat.Rgba32)
                Save<Bgra32>(file);
            else if (_image.Format == Pfim.ImageFormat.Rgb24)
                Save<Bgr24>(file);
            else
                throw new Exception("Unsupported pixel format (" + _image.Format + ")");
        }
        catch { }
    }

    private void Process()
    {
        if (_image == null)
            throw new Exception("DDSImage image creation failed");

        if (_image.Compressed)
            _image.Decompress();
    }


    private void Save<T>(string file)
        where T : struct, IPixel<T>
    {
        Image<T> image = Image.LoadPixelData()

            Image.LoadPixelData<T>(
            _image.Data, _image.Width, _image.Height);
        image.Save(file);
    }

}
}

此程序使用SixlaborsImagesharpFramework从其他DDS格式的文件中读取图像,以获取图像并读取图像PfimFramework

大师斯特隆

尝试使用unmanaged类型约束:

private void Save<T>(string file)
        where T : unmanaged, IPixel<T>

似乎Image<T>来自SixLabors.ImageSharp,您可以在他们的github页面上检查他们正在使用哪些约束

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何制作Stream的副本,以便在使用它时在Java 8中使用副本?

来自分类Dev

如何访问在公共方法中声明的变量以便在私有方法中使用它

来自分类Dev

如何在Flutter中默认使用不可为空的?

来自分类Dev

类型“ MyObject”必须是不可为空的值类型,以便在通用类型或方法“ Nullable <T>”中将其用作参数“ T”

来自分类Dev

如何在C#中解析可为空的DateTime对象

来自分类Dev

如何使用类型引用可为空或如何在 .NET Core 中预览时启用它

来自分类Dev

如何在Array中定义to_proc方法,以便在特定情况下可以使用它

来自分类Dev

如何更改 Kafka Rest Proxy CURL 命令以便在浏览器中使用它

来自分类Dev

如何改进此日志类,以便可以在C#多个项目中使用它?

来自分类Dev

如何分解此SVG字体,以便在Chrome中以编程方式使用它?

来自分类Dev

如何在WPF(C#/ XAML)中获得不同的高级触摸手势?

来自分类Dev

如何将包装DLL连接到API DLL以便在C#项目中使用?

来自分类Dev

如何将VBA long&HFFFFFFF0转换为uint以便在C#中使用?

来自分类Dev

如何将文件复制到目标,以便在运行任务中使用它们?

来自分类Dev

c# - 如何在c#中的非异步函数中使用await调用异步函数?

来自分类Dev

如何在C中使用函数读取数字并在main中使用它?

来自分类Dev

我需要创建一个基于C#的COM Server以便在VBScript中使用

来自分类Dev

我需要创建一个基于C#的COM Server以便在VBScript中使用

来自分类Dev

如何在我的管理网站上获取配置API以便在“登录页面”中使用?

来自分类Dev

如何将构造函数表达式放入数组中并在C#中使用它们?

来自分类Dev

如何在C ++中使用C空括号函数?

来自分类Dev

如何在C ++中使用C空括号函数?

来自分类Dev

如何将来自 API 的 id 存储在变量中,以便在单击时可以使用它来定位信息?

来自分类Dev

使用 IAM 存储证书以便在 NodeJs 服务器中使用它们

来自分类Dev

将字符串编码为数字,以便在scikit-learn中使用它

来自分类Dev

如何在C中使用空的main()方法运行函数?

来自分类Dev

如何在C#中的构造函数中使用重载函数

来自分类Dev

c# - 如何按顺时针顺序(tl、tr、br、bl)对 4 个点的列表进行排序,以便在 opencv getPerspective 中使用?

来自分类Dev

我应该在哪里启动DirectX以便在C#中简单使用?

Related 相关文章

  1. 1

    如何制作Stream的副本,以便在使用它时在Java 8中使用副本?

  2. 2

    如何访问在公共方法中声明的变量以便在私有方法中使用它

  3. 3

    如何在Flutter中默认使用不可为空的?

  4. 4

    类型“ MyObject”必须是不可为空的值类型,以便在通用类型或方法“ Nullable <T>”中将其用作参数“ T”

  5. 5

    如何在C#中解析可为空的DateTime对象

  6. 6

    如何使用类型引用可为空或如何在 .NET Core 中预览时启用它

  7. 7

    如何在Array中定义to_proc方法,以便在特定情况下可以使用它

  8. 8

    如何更改 Kafka Rest Proxy CURL 命令以便在浏览器中使用它

  9. 9

    如何改进此日志类,以便可以在C#多个项目中使用它?

  10. 10

    如何分解此SVG字体,以便在Chrome中以编程方式使用它?

  11. 11

    如何在WPF(C#/ XAML)中获得不同的高级触摸手势?

  12. 12

    如何将包装DLL连接到API DLL以便在C#项目中使用?

  13. 13

    如何将VBA long&HFFFFFFF0转换为uint以便在C#中使用?

  14. 14

    如何将文件复制到目标,以便在运行任务中使用它们?

  15. 15

    c# - 如何在c#中的非异步函数中使用await调用异步函数?

  16. 16

    如何在C中使用函数读取数字并在main中使用它?

  17. 17

    我需要创建一个基于C#的COM Server以便在VBScript中使用

  18. 18

    我需要创建一个基于C#的COM Server以便在VBScript中使用

  19. 19

    如何在我的管理网站上获取配置API以便在“登录页面”中使用?

  20. 20

    如何将构造函数表达式放入数组中并在C#中使用它们?

  21. 21

    如何在C ++中使用C空括号函数?

  22. 22

    如何在C ++中使用C空括号函数?

  23. 23

    如何将来自 API 的 id 存储在变量中,以便在单击时可以使用它来定位信息?

  24. 24

    使用 IAM 存储证书以便在 NodeJs 服务器中使用它们

  25. 25

    将字符串编码为数字,以便在scikit-learn中使用它

  26. 26

    如何在C中使用空的main()方法运行函数?

  27. 27

    如何在C#中的构造函数中使用重载函数

  28. 28

    c# - 如何按顺时针顺序(tl、tr、br、bl)对 4 个点的列表进行排序,以便在 opencv getPerspective 中使用?

  29. 29

    我应该在哪里启动DirectX以便在C#中简单使用?

热门标签

归档