Не удалось неявно преобразовать тип int в LittleEndian ByteOrder
У меня проблема с функцией загрузки изображений в формате 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);
}
1 ответ
int
не может быть неявно преобразовано в 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);
}