|
|
1.1 root 1: /******************************Module*Header*******************************\
2: * Module Name: loadbmp.c
3: *
4: * Contains function that loads a bitmap file
5: *
6: * Created: 08-Jan-1992 11:06:37
7: * Author: Petrus Wong
8: *
9: * Copyright (c) 1990 Microsoft Corporation
10: *
11: * Contains the main routine for loading a DI bitmap file.
12: *
13: * Dependencies:
14: *
15: * (#defines)
16: * (#includes)
17: * #include <windows.h>
18: * #include "jtypes.h"
19: *
20: \**************************************************************************/
21: #include <windows.h>
22: #include "jtypes.h"
23:
24: extern HWND ghwndMain;
25: extern VOID ErrorOut();
26: BOOL LoadBitmapFile(HDC, PINFO, PSTR);
27:
28: /******************************Public*Routine******************************\
29: *
30: * LoadBitmapFile
31: *
32: * Effects: Loads the bitmap from file and put into pInfo->hBmpSaved
33: *
34: * Warnings: pszFileName contains the full path
35: *
36: * History:
37: * 09-Jan-1992 -by- Petrus Wong
38: * Wrote it.
39: \**************************************************************************/
40:
41: BOOL LoadBitmapFile(HDC hDC, PINFO pInfo, PSTR pszFileName)
42: {
43: BOOL bSuccess;
44: HANDLE hFile, hMapFile;
45: LPVOID pMapFile;
46: LPBITMAPINFOHEADER pbmh;
47: LPBITMAPINFO pbmi;
48: PBYTE pjTmp;
49: ULONG sizBMI;
50:
51: bSuccess = TRUE;
52:
53: if ((hFile = CreateFile(pszFileName, GENERIC_READ, FILE_SHARE_READ, NULL,
54: OPEN_EXISTING, FILE_ATTRIBUTE_READONLY, NULL)) == (HANDLE)-1) {
55: ErrorOut("Fail in file open");
56: bSuccess = FALSE;
57: goto ErrExit1;
58: }
59:
60: //
61: // Create a map file of the opened file
62: //
63: if ((hMapFile = CreateFileMapping(hFile, NULL,
64: PAGE_READONLY, 0, 0, "MapF")) == (HANDLE)-1) {
65: ErrorOut("Fail in creating map file");
66: bSuccess = FALSE;
67: goto ErrExit2;
68:
69: }
70:
71: //
72: // Map a view of the whole file
73: //
74: if ((pMapFile = MapViewOfFile(hMapFile, FILE_MAP_READ, 0, 0, 0)) == NULL) {
75: ErrorOut("Fail in mapping view of the Map File object");
76: bSuccess = FALSE;
77: goto ErrExit3;
78: }
79:
80: //
81: // First check that it is a bitmap file
82: //
83: if (*((PWORD)pMapFile) != 0x4d42) { // 'BM'
84: MessageBox(ghwndMain, "This is not a DIB bitmap file!", "Error", MB_OK);
85: bSuccess = FALSE;
86: goto ErrExit3;
87: }
88:
89: pbmh = (LPBITMAPINFOHEADER)((PBYTE)pMapFile + sizeof(BITMAPFILEHEADER));
90:
91: //
92: // Use the size to determine if it is a BitmapCoreHeader or
93: // BitmapInfoHeader
94: //
95: if (pbmh->biSize == sizeof(BITMAPCOREHEADER))
96: {
97: sizBMI = sizeof(BITMAPCOREHEADER)+sizeof(RGBTRIPLE)*
98: ((((LPBITMAPCOREHEADER)pbmh)->bcBitCount == 24) ? 0 : (1 << ((LPBITMAPCOREHEADER)pbmh)->bcBitCount));
99: }
100: else // BITMAPINFOHEADER
101: {
102: sizBMI = sizeof(BITMAPINFOHEADER)+sizeof(RGBQUAD)*
103: ((pbmh->biBitCount == 24) ? 0 : (1 << pbmh->biBitCount));
104: }
105:
106: if ((pbmi = (LPBITMAPINFO) LocalAlloc(LMEM_FIXED,sizBMI)) == NULL) {
107: MessageBox(ghwndMain, "Fail in Memory Allocation!", "Error", MB_OK);
108: bSuccess = FALSE;
109: goto ErrExit3;
110: }
111:
112: //
113: // Make sure we pass in a DWORD aligned BitmapInfo to CreateDIBitmap
114: // Otherwise, exception on the MIPS platform
115: // CR!!! Equivalent to memcpy
116: //
117: pjTmp = (PBYTE)pbmi;
118:
119: while(sizBMI--)
120: {
121: *(((PBYTE)pjTmp)++) = *(((PBYTE)pbmh)++);
122: }
123:
124: pMapFile = (PBYTE)pMapFile + ((BITMAPFILEHEADER *)pMapFile)->bfOffBits;
125:
126: if ((pInfo->hBmpSaved = CreateDIBitmap(hDC, (LPBITMAPINFOHEADER)pbmi,
127: CBM_INIT, pMapFile, pbmi, DIB_RGB_COLORS)) == NULL) {
128: ErrorOut("Fail in creating DIB bitmap from file!");
129: bSuccess = FALSE;
130: goto ErrExit4;
131: }
132:
133:
134:
135: ErrExit4:
136: LocalFree(pbmi);
137: ErrExit3:
138: CloseHandle(hMapFile);
139: ErrExit2:
140: CloseHandle(hFile);
141: ErrExit1:
142:
143: return (bSuccess);
144:
145: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.