JD2022-TU1/main/extern/Vestris.ResourceLib/1.2/Source/ResourceLib/BitmapFile.cs

52 lines
1.5 KiB
C#

using System;
using System.Runtime.InteropServices;
using System.IO;
namespace Vestris.ResourceLib
{
/// <summary>
/// A bitmap file in a .bmp format.
/// </summary>
public class BitmapFile
{
private Gdi32.BITMAPFILEHEADER _header = new Gdi32.BITMAPFILEHEADER();
private DeviceIndependentBitmap _bitmap = null;
/// <summary>
/// Device independent bitmap.
/// </summary>
public DeviceIndependentBitmap Bitmap
{
get
{
return _bitmap;
}
}
/// <summary>
/// An existing bitmap file.
/// </summary>
/// <param name="filename">A file in a .bmp format.</param>
public BitmapFile(string filename)
{
byte[] data = File.ReadAllBytes(filename);
IntPtr pFileHeaderData = Marshal.AllocHGlobal(Marshal.SizeOf(_header));
try
{
Marshal.Copy(data, 0, pFileHeaderData, Marshal.SizeOf(_header));
_header = (Gdi32.BITMAPFILEHEADER)Marshal.PtrToStructure(
pFileHeaderData, typeof(Gdi32.BITMAPFILEHEADER));
}
finally
{
Marshal.FreeHGlobal(pFileHeaderData);
}
Int32 size = data.Length - Marshal.SizeOf(_header);
byte[] bitmapData = new byte[size];
Buffer.BlockCopy(data, Marshal.SizeOf(_header), bitmapData, 0, size);
_bitmap = new DeviceIndependentBitmap(bitmapData);
}
}
}