1 | #include "bmpUtil.h"
|
---|
2 |
|
---|
3 | #include <stdio.h>
|
---|
4 | #include <mem.h>
|
---|
5 | #include <stdlib.h>
|
---|
6 |
|
---|
7 | HPALETTE bmpUtil_getDIBPalette(LPBITMAPINFO bmpInfo, unsigned int colours)
|
---|
8 | { LPBITMAPINFOHEADER bmpHeader;
|
---|
9 | LPLOGPALETTE logicalPalette;
|
---|
10 | HPALETTE reply = 0;
|
---|
11 |
|
---|
12 | bmpHeader = (LPBITMAPINFOHEADER) bmpInfo;
|
---|
13 | MessageBox(0, "A", "A", MB_OK);
|
---|
14 |
|
---|
15 | if (colours)
|
---|
16 | {
|
---|
17 | MessageBox(0, "A", "A", MB_OK);
|
---|
18 | logicalPalette = (LPLOGPALETTE) GlobalAlloc(GMEM_FIXED, sizeof (LOGPALETTE) + sizeof(PALETTEENTRY) * (colours));
|
---|
19 | if (logicalPalette == NULL)
|
---|
20 | { return reply;
|
---|
21 | }
|
---|
22 |
|
---|
23 | logicalPalette->palVersion = 0x300;
|
---|
24 | logicalPalette->palNumEntries = colours;
|
---|
25 | MessageBox(0, "A", "A", MB_OK);
|
---|
26 | for (int i = 0; i < colours; i ++)
|
---|
27 | { logicalPalette->palPalEntry[i].peRed = bmpInfo->bmiColors[i].rgbRed;
|
---|
28 | logicalPalette->palPalEntry[i].peGreen = bmpInfo->bmiColors[i].rgbGreen;
|
---|
29 | logicalPalette->palPalEntry[i].peBlue = bmpInfo->bmiColors[i].rgbBlue;
|
---|
30 | logicalPalette->palPalEntry[i].peFlags = 0;
|
---|
31 | }
|
---|
32 | reply = CreatePalette(logicalPalette);
|
---|
33 | GlobalFree((HGLOBAL) logicalPalette);
|
---|
34 | }
|
---|
35 | return reply;
|
---|
36 | }
|
---|
37 |
|
---|
38 | HBITMAP _export bmpUtil_loadBitmap(HDC device, char *filename)
|
---|
39 | { BYTE dummy[2];
|
---|
40 | BITMAPINFO bitmapInfo;
|
---|
41 | OFSTRUCT of;
|
---|
42 |
|
---|
43 | HFILE file;
|
---|
44 | BITMAPFILEHEADER fileHeader;
|
---|
45 | LPRGBQUAD colours;
|
---|
46 | LPBITMAPINFO bitmapData;
|
---|
47 | LPBYTE image;
|
---|
48 | unsigned int colourCount;
|
---|
49 | HBITMAP reply;
|
---|
50 | char buffer[40];
|
---|
51 |
|
---|
52 | file = OpenFile(filename, &of, OF_READ);
|
---|
53 | if (!file)
|
---|
54 | { return NULL;
|
---|
55 | }
|
---|
56 |
|
---|
57 | if (!_lread(file, &fileHeader, sizeof(BITMAPFILEHEADER)))
|
---|
58 | { MessageBox(0, "M1", "M", MB_OK);
|
---|
59 | }
|
---|
60 | if (!_lread(file, &bitmapInfo.bmiHeader, 40))
|
---|
61 | { MessageBox(0, "M2", "M", MB_OK);
|
---|
62 | }
|
---|
63 |
|
---|
64 | colourCount = 1 << bitmapInfo.bmiHeader.biBitCount;
|
---|
65 | bitmapData = (BITMAPINFO *) GlobalAlloc(GMEM_FIXED, sizeof(BITMAPINFOHEADER) + sizeof(RGBQUAD) * colourCount);
|
---|
66 | if (!bitmapData)
|
---|
67 | { MessageBox(0, "M3", "M", MB_OK);
|
---|
68 | }
|
---|
69 |
|
---|
70 | bitmapData->bmiHeader = bitmapInfo.bmiHeader;
|
---|
71 |
|
---|
72 | colours = (RGBQUAD *) &bitmapData->bmiColors;
|
---|
73 | if (_lread(file, colours, sizeof(RGBQUAD) * colourCount) < colourCount)
|
---|
74 | { MessageBox(0, "M4", "M", MB_OK);
|
---|
75 | }
|
---|
76 |
|
---|
77 | image = (BYTE FAR *) GlobalAlloc(GMEM_FIXED, sizeof(BYTE) * bitmapData->bmiHeader.biSizeImage);
|
---|
78 | if (!image)
|
---|
79 | { MessageBox(0, "M5", "M", MB_OK);
|
---|
80 | }
|
---|
81 | if (_lread(file, image, sizeof(BYTE) * bitmapData->bmiHeader.biSizeImage) < bitmapData->bmiHeader.biSizeImage)
|
---|
82 | { MessageBox(0, "M", "M6", MB_OK);
|
---|
83 | }
|
---|
84 |
|
---|
85 | HPALETTE pal = bmpUtil_getDIBPalette(bitmapData, colourCount);
|
---|
86 | sprintf(buffer, "%d", (int) pal);
|
---|
87 | MessageBox(0, buffer, "M0", MB_OK);
|
---|
88 |
|
---|
89 | reply = CreateCompatibleBitmap (device, 501, 228);
|
---|
90 | sprintf(buffer, "%d", reply);
|
---|
91 | MessageBox(0, buffer, "M1", MB_OK);
|
---|
92 | if (reply != NULL)
|
---|
93 | { int r = SetDIBits(device, reply, 0, bitmapData->bmiHeader.biHeight, image, bitmapData, DIB_RGB_COLORS);
|
---|
94 | sprintf(buffer, "%d", r);
|
---|
95 | MessageBox(0, buffer, "M2", MB_OK);
|
---|
96 | DeleteObject(reply);
|
---|
97 | }
|
---|
98 |
|
---|
99 | reply = CreateDIBitmap( device, &bitmapData->bmiHeader, CBM_INIT, image, bitmapData, DIB_RGB_COLORS);
|
---|
100 | sprintf(buffer, "%d", reply);
|
---|
101 | MessageBox(0, buffer, "M", MB_OK);
|
---|
102 | GlobalFree((HLOCAL) bitmapData);
|
---|
103 | GlobalFree((HLOCAL) image);
|
---|
104 | _lclose(file);
|
---|
105 | return reply;
|
---|
106 | } |
---|