[C#] Чтение файла в объекты классов (Bitmap)
От: AstelAmbresson  
Дата: 05.11.12 17:51
Оценка:
Приветствую всех!

В общем-то суть: необходимо считать файл формата bmp вручную в объекты след. классов:
        public class BITMAPFILEHEADER
        {
            public UInt16 bfType { get; set; }
            public UInt32 bfSize { get; set; }
            public UInt16 bfReserved1 { get; set; }
            public UInt16 bfReserved2 { get; set; }
            public UInt32 bfOffBits { get; set; }
        }

        public class BITMAPINFOHEADER
        {
            public UInt32 biSize { get; set; }
            public UInt32 biWidth { get; set; }
            public UInt32 biHeight { get; set; }
            public UInt16 biPlanes { get; set; }
            public UInt16 biBitCount { get; set; }
            public UInt32 biCompression { get; set; }
            public UInt32 biSizeImage { get; set; }
            public UInt32 biXPelsMeter { get; set; }
            public UInt32 biYPelsMeter { get; set; }
            public UInt32 biClrUsed { get; set; }
            public UInt32 biClrImportant { get; set; }
        }

        public class RGBTriplet
        {
            public byte red { get; set; }
            public byte green { get; set; }
            public byte blue { get; set; }

        }

и оставшуюся часть файла в массив byte[].

Собственно проблема: как это сделать?

Пытался использовать BinaryReader:
            var fs = new FileStream(@"D:\1.bmp", FileMode.Open, FileAccess.Read);
            var br = new BinaryReader(fs);
            var image = new BitmapImage();
            image.BFH.bfType = br.ReadUInt16();
            image.BFH.bfSize = br.ReadUInt32();
// и так далее по полям

но выкидывает exception на image.BFH.bfType = br.ReadUInt16();

Может кто-нибудь что-нибудь посоветовать по сути?
image file to object
Re: [C#] Чтение файла в объекты классов (Bitmap)
От: andrey82  
Дата: 05.11.12 18:34
Оценка:
Здравствуйте, AstelAmbresson, Вы писали:

AA>но выкидывает exception на image.BFH.bfType = br.ReadUInt16();


и... что именно за Exception? Или вопрос и состоит в угадывании хотя бы класса исключения?

AA>Может кто-нибудь что-нибудь посоветовать по сути?

Навскидку, стоит добавить параметр
FileShare.Read
в конструктор FileStream.
Ну и не хватает
image.BFH = new BITMAPFILEHEADER()
...или он в конструкторе BitmapImage()?
Re: [C#] Чтение файла в объекты классов (Bitmap)
От: samius Япония http://sams-tricks.blogspot.com
Дата: 05.11.12 19:11
Оценка:
Здравствуйте, AstelAmbresson, Вы писали:

AA>Приветствую всех!


AA>В общем-то суть: необходимо считать файл формата bmp вручную в объекты след. классов:

AA>
AA>        public class BITMAPFILEHEADER
AA>

AA>и оставшуюся часть файла в массив byte[].

AA>Собственно проблема: как это сделать?



AA>Пытался использовать BinaryReader:

AA>Может кто-нибудь что-нибудь посоветовать по сути?

Не нужен BinaryReader. Читайте прямо из Stream-а.
описания структур берутся из
http://www.pinvoke.net/default.aspx/Structures/BITMAPFILEHEADER.html

Размеры с помощью
Marshal.SizeOf
конвертация из байт в структуры
Marshal.PtrToStructure
Re[2]: [C#] Чтение файла в объекты классов (Bitmap)
От: AstelAmbresson  
Дата: 05.11.12 19:20
Оценка:
Здравствуйте, andrey82, Вы писали:

A>Здравствуйте, AstelAmbresson, Вы писали:


AA>>но выкидывает exception на image.BFH.bfType = br.ReadUInt16();


A>и... что именно за Exception? Или вопрос и состоит в угадывании хотя бы класса исключения?


AA>>Может кто-нибудь что-нибудь посоветовать по сути?

A>Навскидку, стоит добавить параметр
FileShare.Read
в конструктор FileStream.

A>Ну и не хватает
image.BFH = new BITMAPFILEHEADER()
...или он в конструкторе BitmapImage()?


с FileShare.Read exception не выкидывает..

конструкторы классов в конструкторе BitmapImage() были описаны
Re[2]: [C#] Чтение файла в объекты классов (Bitmap)
От: AstelAmbresson  
Дата: 05.11.12 19:20
Оценка:
Здравствуйте, samius, Вы писали:

S>Здравствуйте, AstelAmbresson, Вы писали:


AA>>Приветствую всех!


AA>>В общем-то суть: необходимо считать файл формата bmp вручную в объекты след. классов:

AA>>
AA>>        public class BITMAPFILEHEADER
AA>>

AA>>и оставшуюся часть файла в массив byte[].

AA>>Собственно проблема: как это сделать?



AA>>Пытался использовать BinaryReader:

AA>>Может кто-нибудь что-нибудь посоветовать по сути?

S>Не нужен BinaryReader. Читайте прямо из Stream-а.

S>описания структур берутся из
S>http://www.pinvoke.net/default.aspx/Structures/BITMAPFILEHEADER.html

S>Размеры с помощью

S>Marshal.SizeOf
S>конвертация из байт в структуры
S>Marshal.PtrToStructure

Спасибо, буду разбираться...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.