Приветствую всех!
В общем-то суть: необходимо считать файл формата 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();
Может кто-нибудь что-нибудь посоветовать по сути?
Здравствуйте, AstelAmbresson, Вы писали:
AA>но выкидывает exception на image.BFH.bfType = br.ReadUInt16();
и... что именно за Exception? Или вопрос и состоит в угадывании хотя бы класса исключения?
AA>Может кто-нибудь что-нибудь посоветовать по сути?
Навскидку, стоит добавить параметр
FileShare.Read
в конструктор FileStream.
Ну и не хватает
image.BFH = new BITMAPFILEHEADER()
...или он в конструкторе BitmapImage()?
Здравствуйте, 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
Здравствуйте, 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() были описаны
Здравствуйте, 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
Спасибо, буду разбираться...