不能隐式转换类型'int'到LittleEndian字节顺序
本文关键字:LittleEndian 字节 顺序 int 类型 不能 转换 | 更新日期: 2023-09-27 18:13:49
我有一个问题,我的函数加载RAW图像。我不明白这个错误的原因。它显示了这个错误:
不能隐式地将int类型转换为Digital_Native_Image.DNI_Image.Byteorder
public void load_DNI(string ficsrc)
{
FileStream FS = null;
BinaryReader BR = null;
int width = 0;
int height = 0;
DNI_Image.Datatype dataformat = Datatype.SNG;
DNI_Image.Byteorder byteformat = Byteorder.LittleEndian;
FS = new FileStream(ficsrc, System.IO.FileMode.Open);
BR = new BinaryReader(FS);
dataformat = BR.ReadInt32();
byteformat = BR.ReadInt32();
width = BR.ReadInt32();
height = BR.ReadInt32();
// fermeture des fichiers
if ((BR != null))
BR.Close();
if ((FS != null))
FS.Dispose();
// chargement de l'_image
ReadImage(ficsrc, width, height, dataformat, byteformat);
}
int
's不能隐式地转换为enum
's,您需要在这里添加显式强制转换:
dataformat = (Datatype.SNG)BR.ReadInt32();
byteformat = (Byteorder)BR.ReadInt32();
有关更多信息,请阅读《c#编程指南》中的强制转换和类型转换。
然而,注意if (BR != null)
检查是不必要的,这真的不是正确的方式来处理IDisposable
对象。我建议您重写此代码以使用using
块。这将确保FS
和BR
得到正确的处理:
int width;
int height;
Datatype dataformat;
Byteorder byteformat;
using (var FS = FileStream(ficsrc, System.IO.FileMode.Open))
using (var BR = new BinaryReader(FS))
{
dataformat = (Datatype.SNG)BR.ReadInt32();
byteformat = (Byteorder.LittleEndian)BR.ReadInt32();
width = BR.ReadInt32();
height = BR.ReadInt32();
}
// chargement de l'_image
ReadImage(ficsrc, width, height, dataformat, byteformat);
但似乎你也可以通过重构ReadImage
方法来使用相同的BinaryReader
来改进这一点。然后,您可以重写此方法,使其看起来更像这样:
using (var FS = FileStream(ficsrc, System.IO.FileMode.Open))
using (var BR = new BinaryReader(FS))
{
var dataformat = (Datatype.SNG)BR.ReadInt32();
var byteformat = (Byteorder.LittleEndian)BR.ReadInt32();
var width = BR.ReadInt32();
var height = BR.ReadInt32();
ReadImage(ficsrc, width, height, dataformat, byteformat, BR);
}