]> git.saurik.com Git - wxWidgets.git/blame - include/wx/msw/dibutils.h
converted to 16 colors
[wxWidgets.git] / include / wx / msw / dibutils.h
CommitLineData
2bda0e17
KB
1/////////////////////////////////////////////////////////////////////////////
2// Name: dibutils.h
3// Purpose: Utilities for DIBs
4// Author: Julian Smart
5// Modified by:
6// Created: 04/01/98
7// RCS-ID: $Id$
8// Copyright: (c) Microsoft, Julian Smart
bbcdf8bc 9// Licence: wxWindows licence
2bda0e17
KB
10/////////////////////////////////////////////////////////////////////////////
11
12/***************************************************************************
13
14 (C) Copyright 1994 Microsoft Corp. All rights reserved.
15
16 You have a royalty-free right to use, modify, reproduce and
17 distribute the Sample Files (and/or any modified version) in
18 any way you find useful, provided that you agree that
19 Microsoft has no warranty obligations or liability for any
20 Sample Application Files which are modified.
21
22 **************************************************************************/
23
24/***************************************************************************
25 Functions for handling Device Independent Bitmaps and clearing the
26 System Palette.
27 **************************************************************************/
28
29#ifndef SAMPLES_UTILS_H
30#define SAMPLES_UTILS_H
31
32#ifdef __GNUG__
33#pragma interface "dibutils.h"
34#endif
35
36typedef LPBITMAPINFOHEADER PDIB;
37typedef HANDLE HDIB;
38
39/***************************************************************************
40 External function declarations
41 **************************************************************************/
42
43void ClearSystemPalette(void);
9df8c2df
OK
44PDIB DibOpenFile(LPTSTR szFile);
45int DibWriteFile(LPTSTR szFile, LPBITMAPINFOHEADER lpbi);
2bda0e17
KB
46BOOL DibSetUsage(PDIB pdib, HPALETTE hpal,UINT wUsage);
47PDIB DibCreate(int bits, int dx, int dy);
48BOOL DibMapToPalette(PDIB pdib, HPALETTE hpal);
49HPALETTE MakePalette(const BITMAPINFO FAR* Info, UINT flags);
50
51/****************************************************************************
52 Internal function declarations
53 ***************************************************************************/
54
55PDIB DibReadBitmapInfo(HFILE fh);
56
57/****************************************************************************
58 DIB macros.
59 ***************************************************************************/
60
61#ifdef WIN32
62 #define HandleFromDib(lpbi) GlobalHandle(lpbi)
63#else
64 #define HandleFromDib(lpbi) (HANDLE)GlobalHandle(SELECTOROF(lpbi))
65#endif
66
67#define DibFromHandle(h) (PDIB)GlobalLock(h)
68
69#define DibFree(pdib) GlobalFreePtr(pdib)
70
71#define WIDTHBYTES(i) ((unsigned)((i+31)&(~31))/8) /* ULONG aligned ! */
72
73#define DibWidth(lpbi) (UINT)(((LPBITMAPINFOHEADER)(lpbi))->biWidth)
74#define DibHeight(lpbi) (UINT)(((LPBITMAPINFOHEADER)(lpbi))->biHeight)
75#define DibBitCount(lpbi) (UINT)(((LPBITMAPINFOHEADER)(lpbi))->biBitCount)
76#define DibCompression(lpbi) (DWORD)(((LPBITMAPINFOHEADER)(lpbi))->biCompression)
77
78#define DibWidthBytesN(lpbi, n) (UINT)WIDTHBYTES((UINT)(lpbi)->biWidth * (UINT)(n))
79#define DibWidthBytes(lpbi) DibWidthBytesN(lpbi, (lpbi)->biBitCount)
80
81#define DibSizeImage(lpbi) ((lpbi)->biSizeImage == 0 \
82 ? ((DWORD)(UINT)DibWidthBytes(lpbi) * (DWORD)(UINT)(lpbi)->biHeight) \
83 : (lpbi)->biSizeImage)
84
85#define DibSize(lpbi) ((lpbi)->biSize + (lpbi)->biSizeImage + (int)(lpbi)->biClrUsed * sizeof(RGBQUAD))
86#define DibPaletteSize(lpbi) (DibNumColors(lpbi) * sizeof(RGBQUAD))
87
88#define DibFlipY(lpbi, y) ((int)(lpbi)->biHeight-1-(y))
89
90//HACK for NT BI_BITFIELDS DIBs
91#ifdef WIN32
92 #define DibPtr(lpbi) ((lpbi)->biCompression == BI_BITFIELDS \
93 ? (LPVOID)(DibColors(lpbi) + 3) \
94 : (LPVOID)(DibColors(lpbi) + (UINT)(lpbi)->biClrUsed))
95#else
96 #define DibPtr(lpbi) (LPVOID)(DibColors(lpbi) + (UINT)(lpbi)->biClrUsed)
97#endif
98
99#define DibColors(lpbi) ((RGBQUAD FAR *)((LPBYTE)(lpbi) + (int)(lpbi)->biSize))
100
101#define DibNumColors(lpbi) ((lpbi)->biClrUsed == 0 && (lpbi)->biBitCount <= 8 \
102 ? (int)(1 << (int)(lpbi)->biBitCount) \
103 : (int)(lpbi)->biClrUsed)
104
105#define DibXYN(lpbi,pb,x,y,n) (LPVOID)( \
106 (BYTE _huge *)(pb) + \
107 (UINT)((UINT)(x) * (UINT)(n) / 8u) + \
108 ((DWORD)DibWidthBytesN(lpbi,n) * (DWORD)(UINT)(y)))
109
110#define DibXY(lpbi,x,y) DibXYN(lpbi,DibPtr(lpbi),x,y,(lpbi)->biBitCount)
111
112#define FixBitmapInfo(lpbi) if ((lpbi)->biSizeImage == 0) \
113 (lpbi)->biSizeImage = DibSizeImage(lpbi); \
114 if ((lpbi)->biClrUsed == 0) \
2917e920
BM
115 (lpbi)->biClrUsed = DibNumColors(lpbi);
116
117// if ((lpbi)->biCompression == BI_BITFIELDS && (lpbi)->biClrUsed == 0)
118// ; // (lpbi)->biClrUsed = 3;
2bda0e17
KB
119
120#define DibInfo(pDIB) ((BITMAPINFO FAR *)(pDIB))
121
122/***************************************************************************/
123
124#ifndef BI_BITFIELDS
125 #define BI_BITFIELDS 3
126#endif
127
128#ifndef HALFTONE
129 #define HALFTONE COLORONCOLOR
130#endif
131
132#endif