如何在 C# 中获取 Non-Nullable T 以在函数中使用它?
How do I get a Non-Nullable T in C# to use it in a function?
此代码中出现错误。
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' 必须是不可为 null 的值类型,以及任何嵌套级别的所有字段,以便将其用作泛型类型或方法中的参数
我正在使用 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);
}
}
}
此程序从另一个 DDS 格式的文件中读取图像
我正在使用 SixlaborsImagesharpFramework 获取图像
并读取图像 PfimFramework
此代码中出现错误。
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' 必须是不可为 null 的值类型,以及任何嵌套级别的所有字段,以便将其用作泛型类型或方法中的参数
我正在使用 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);
}
}
}
此程序从另一个 DDS 格式的文件中读取图像 我正在使用 SixlaborsImagesharpFramework 获取图像 并读取图像 PfimFramework