2 * PROJECT: PAINT for ReactOS
5 * PURPOSE: Some DIB related functions
6 * PROGRAMMERS: Benedikt Freisen
9 /* INCLUDES *********************************************************/
13 /* FUNCTIONS ********************************************************/
15 HBITMAP
CreateDIBWithProperties(int width
, int height
)
17 BITMAPINFO bitmapinfo
;
18 bitmapinfo
.bmiHeader
.biSize
= sizeof (BITMAPINFOHEADER
);
19 bitmapinfo
.bmiHeader
.biWidth
= width
;
20 bitmapinfo
.bmiHeader
.biHeight
= height
;
21 bitmapinfo
.bmiHeader
.biPlanes
= 1;
22 bitmapinfo
.bmiHeader
.biBitCount
= 24;
23 bitmapinfo
.bmiHeader
.biCompression
= BI_RGB
;
24 bitmapinfo
.bmiHeader
.biSizeImage
= 0;
25 bitmapinfo
.bmiHeader
.biXPelsPerMeter
= 0;
26 bitmapinfo
.bmiHeader
.biYPelsPerMeter
= 0;
27 bitmapinfo
.bmiHeader
.biClrUsed
= 0;
28 bitmapinfo
.bmiHeader
.biClrImportant
= 0;
29 return CreateDIBSection(NULL
, &bitmapinfo
, DIB_RGB_COLORS
, NULL
, NULL
, 0);
32 int GetDIBWidth(HBITMAP hbm
)
35 GetObject(hbm
, sizeof(BITMAP
), &bm
);
39 int GetDIBHeight(HBITMAP hbm
)
42 GetObject(hbm
, sizeof(BITMAP
), &bm
);
46 void SaveDIBToFile(HBITMAP hbm
, char name
[], HDC hdc
)
49 GetObject(hbm
, sizeof(BITMAP
), &bm
);
52 int imgDataSize
= bm
.bmWidthBytes
*bm
.bmHeight
;
54 bf
.bfSize
= imgDataSize
+52;
59 bi
.biWidth
= bm
.bmWidth
;
60 bi
.biHeight
= bm
.bmHeight
;
61 bi
.biPlanes
= bm
.bmPlanes
;
62 bi
.biBitCount
= bm
.bmBitsPixel
;
63 bi
.biCompression
= BI_RGB
;
65 bi
.biXPelsPerMeter
= 0;
66 bi
.biYPelsPerMeter
= 0;
68 bi
.biClrImportant
= 0;
69 int *buffer
= HeapAlloc(GetProcessHeap(), HEAP_GENERATE_EXCEPTIONS
, imgDataSize
);
70 GetDIBits(hdc
, hbm
, 0, bm
.bmHeight
, buffer
, (LPBITMAPINFO
)&bi
, DIB_RGB_COLORS
);
71 HANDLE f
= CreateFile(name
, GENERIC_WRITE
, 0, NULL
, CREATE_ALWAYS
, FILE_FLAG_SEQUENTIAL_SCAN
, NULL
);
73 WriteFile(f
, &bf
, 14, (LPDWORD
)&bytesWritten
, NULL
);
74 WriteFile(f
, &bi
, 40, (LPDWORD
)&bytesWritten
, NULL
);
75 WriteFile(f
, buffer
, imgDataSize
, (LPDWORD
)&bytesWritten
, NULL
);
77 HeapFree(GetProcessHeap(), 0, buffer
);
80 HBITMAP
LoadDIBFromFile(char name
[])
87 HANDLE f
= CreateFile(name
, GENERIC_READ
, FILE_SHARE_READ
, NULL
, OPEN_EXISTING
, FILE_FLAG_SEQUENTIAL_SCAN
, NULL
);
88 ReadFile(f
, &bfh
, 14, (LPDWORD
)&bytesRead
, NULL
);
89 if (bfh
.bfType
!=0x4d42)
94 bi
= HeapAlloc(GetProcessHeap(), HEAP_GENERATE_EXCEPTIONS
, bfh
.bfOffBits
-14);
95 ReadFile(f
, bi
, bfh
.bfOffBits
-14, (LPDWORD
)&bytesRead
, NULL
);
96 bm
= CreateDIBSection(NULL
, bi
, DIB_RGB_COLORS
, &data
, NULL
, 0);
97 ReadFile(f
, data
, bfh
.bfSize
-bfh
.bfOffBits
, (LPDWORD
)&bytesRead
, NULL
);
99 HeapFree(GetProcessHeap(), 0, bi
);