lipsync/bocoree/wingdi.cs

169 lines
5.5 KiB
C#
Raw Permalink Normal View History

#if !JAVA
/*
* wingdi.cs
* Copyright (c) 2008-2009 kbinani
*
* This file is part of bocoree.
*
* bocoree is free software; you can redistribute it and/or
* modify it under the terms of the BSD License.
*
* bocoree is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*/
using System;
using System.Runtime.InteropServices;
using System.IO;
namespace bocoree {
[StructLayout( LayoutKind.Sequential, Pack = 1 )]
public struct BITMAPINFOHEADER {
public UInt32 biSize;
public Int32 biWidth;
public Int32 biHeight;
public Int16 biPlanes;
public Int16 biBitCount;
public UInt32 biCompression;
public UInt32 biSizeImage;
public Int32 biXPelsPerMeter;
public Int32 biYPelsPerMeter;
public UInt32 biClrUsed;
public UInt32 biClrImportant;
public static BITMAPINFOHEADER Read( Stream stream ) {
BITMAPINFOHEADER bifh = new BITMAPINFOHEADER();
byte[] buf = new byte[4];
bifh.biSize = readUInt32( stream );
bifh.biWidth = readInt32( stream );
bifh.biHeight = readInt32( stream );
bifh.biPlanes = readInt16( stream );
bifh.biBitCount = readInt16( stream );
bifh.biCompression = readUInt32( stream );
bifh.biSizeImage = readUInt32( stream );
bifh.biXPelsPerMeter = readInt32( stream );
bifh.biYPelsPerMeter = readInt32( stream );
bifh.biClrUsed = readUInt32( stream );
bifh.biClrImportant = readUInt32( stream );
return bifh;
}
private static uint readUInt32( Stream fs ){
byte[] buf = new byte[4];
fs.Read( buf, 0, 4 );
return BitConverter.ToUInt32( buf, 0 );
}
private static int readInt32( Stream fs ){
byte[] buf = new byte[4];
fs.Read( buf, 0, 4 );
return BitConverter.ToInt32( buf, 0 );
}
private static ushort readUInt16( Stream fs ){
byte[] buf = new byte[2];
fs.Read( buf, 0, 2 );
return BitConverter.ToUInt16( buf, 0 );
}
private static short readInt16( Stream fs ){
byte[] buf = new byte[2];
fs.Read( buf, 0, 2 );
return BitConverter.ToInt16( buf, 0 );
}
public override string ToString() {
return "{biSize=" + biSize + ", biWidth=" + biWidth + ", biHeight=" + biHeight + ", biPlanes=" + biPlanes + ", biBitCount=" + biBitCount +
", biCompression=" + biCompression + ", biSizeImage=" + biSizeImage + ", biXPelsPerMeter=" + biXPelsPerMeter + ", biYPelsPerMeter=" + biYPelsPerMeter +
", biClrUsed=" + biClrUsed + ", biClrImportant=" + biClrImportant + "}";
}
public void Write( BinaryWriter bw ) {
bw.Write( biSize );
bw.Write( (uint)biWidth );
bw.Write( (uint)biHeight );
bw.Write( (ushort)biPlanes );
bw.Write( (ushort)biBitCount );
bw.Write( (uint)biCompression );
bw.Write( (uint)biSizeImage );
bw.Write( (uint)biXPelsPerMeter );
bw.Write( (uint)biYPelsPerMeter );
bw.Write( (uint)biClrUsed );
bw.Write( (uint)biClrImportant );
}
public void Write( Stream s ) {
byte[] b;
bool bigendian = !BitConverter.IsLittleEndian;
b = BitConverter.GetBytes( biSize );
if ( bigendian ) {
Array.Reverse( b );
}
s.Write( b, 0, 4 );
b = BitConverter.GetBytes( biWidth );
if ( bigendian ) {
Array.Reverse( b );
}
s.Write( b, 0, 4 );
b = BitConverter.GetBytes( biHeight );
if ( bigendian ) {
Array.Reverse( b );
}
s.Write( b, 0, 4 );
b = BitConverter.GetBytes( biPlanes );
if ( bigendian ) {
Array.Reverse( b );
}
s.Write( b, 0, 2 );
b = BitConverter.GetBytes( biBitCount );
if ( bigendian ) {
Array.Reverse( b );
}
s.Write( b, 0, 2 );
b = BitConverter.GetBytes( biCompression );
if ( bigendian ) {
Array.Reverse( b );
}
s.Write( b, 0, 4 );
b = BitConverter.GetBytes( biSizeImage );
if ( bigendian ) {
Array.Reverse( b );
}
s.Write( b, 0, 4 );
b = BitConverter.GetBytes( biXPelsPerMeter );
if ( bigendian ) {
Array.Reverse( b );
}
s.Write( b, 0, 4 );
b = BitConverter.GetBytes( biYPelsPerMeter );
if ( bigendian ) {
Array.Reverse( b );
}
s.Write( b, 0, 4 );
b = BitConverter.GetBytes( biClrUsed );
if ( bigendian ) {
Array.Reverse( b );
}
s.Write( b, 0, 4 );
b = BitConverter.GetBytes( biClrImportant );
if ( bigendian ) {
Array.Reverse( b );
}
s.Write( b, 0, 4 );
}
}
}
#endif