--- /dev/null
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Runtime.InteropServices;
+using System.Drawing;
+using System.IO;
+
+namespace FDK
+{
+ public static class BitmapUtil
+ {
+ // 定数
+
+ public const uint DIB_PAL_COLORS = 1;
+ public const uint DIB_RGB_COLORS = 0;
+
+
+ // 構造体
+
+ [StructLayout( LayoutKind.Sequential, Pack = 1 )]
+ public struct BITMAPFILEHEADER
+ {
+ public ushort bfType;
+ public uint bfSize;
+ public ushort bfReserved1;
+ public ushort bfReserved2;
+ public uint bfOffBits;
+ }
+
+ [StructLayout( LayoutKind.Sequential, Pack = 1 )]
+ public struct BITMAPINFOHEADER
+ {
+ public const int BI_RGB = 0;
+ public uint biSize構造体のサイズ;
+ public int biWidthビットマップの幅dot;
+ public int biHeightビットマップの高さdot;
+ public ushort biPlanes面の数;
+ public ushort biBitCount;
+ public uint biCompression圧縮形式;
+ public uint biSizeImage画像イメージのサイズ;
+ public int biXPelsPerMete水平方向の解像度;
+ public int biYPelsPerMeter垂直方向の解像度;
+ public uint biClrUsed色テーブルのインデックス数;
+ public uint biClrImportant表示に必要な色インデックスの数;
+ }
+
+
+ // メソッド
+
+ public static unsafe Bitmap ToBitmap( IntPtr pBITMAPINFOHEADER )
+ {
+ BITMAPFILEHEADER bitmapfileheader;
+ BITMAPINFOHEADER* bitmapinfoheaderPtr = (BITMAPINFOHEADER*) pBITMAPINFOHEADER;
+ bitmapfileheader.bfType = 0x4d42;
+ bitmapfileheader.bfOffBits = (uint) ( sizeof( BITMAPFILEHEADER ) + sizeof( BITMAPINFOHEADER ) );
+ bitmapfileheader.bfSize = bitmapfileheader.bfOffBits + bitmapinfoheaderPtr->biSizeImage画像イメージのサイズ;
+ MemoryStream output = new MemoryStream();
+ BinaryWriter writer = new BinaryWriter( output );
+ byte[] destination = new byte[ sizeof( BITMAPFILEHEADER ) ];
+ Marshal.Copy( (IntPtr) ( &bitmapfileheader ), destination, 0, destination.Length );
+ writer.Write( destination );
+ destination = new byte[ sizeof( BITMAPINFOHEADER ) ];
+ Marshal.Copy( pBITMAPINFOHEADER, destination, 0, destination.Length );
+ writer.Write( destination );
+ destination = new byte[ bitmapinfoheaderPtr->biSizeImage画像イメージのサイズ ];
+ bitmapinfoheaderPtr++;
+ Marshal.Copy( (IntPtr) bitmapinfoheaderPtr, destination, 0, destination.Length );
+ writer.Write( destination );
+ writer.Flush();
+ writer.BaseStream.Position = 0L;
+ return new Bitmap( writer.BaseStream );
+ }
+ }
+}