2014-07-20 4 views
0

У меня проблема с моей функцией загрузки RAW-изображений. Я не понимаю причину ошибки. Он показывает мне эту ошибку:Невозможно неявно преобразовать тип 'int' в LittleEndian ByteOrder

Cannot implicitly convert type 'int' to '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 's не может быть неявно преобразован в enum' с. Вам нужно добавить явное приведение здесь:

dataformat = (Datatype.SNG)BR.ReadInt32(); 
byteformat = (Byteorder)BR.ReadInt32(); 

Читать Casting and Type Conversions (C# Programming Guide) для получения дополнительной информации.

Обратите внимание, что проверка if (BR != null) не требуется, и это действительно не правильный способ обработки IDisposable объектов. Я бы предложил вам переписать этот код, чтобы использовать using blocks. Это гарантирует, что 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); 
}