[PRINTING]
[reactos.git] / reactos / base / applications / mspaint / dib.cpp
1 /*
2 * PROJECT: PAINT for ReactOS
3 * LICENSE: LGPL
4 * FILE: base/applications/mspaint/dib.cpp
5 * PURPOSE: Some DIB related functions
6 * PROGRAMMERS: Benedikt Freisen
7 */
8
9 /* INCLUDES *********************************************************/
10
11 #include "precomp.h"
12
13 /* FUNCTIONS ********************************************************/
14
15 HBITMAP
16 CreateDIBWithProperties(int width, int height)
17 {
18 BITMAPINFO bmi;
19 ZeroMemory(&bmi, sizeof(BITMAPINFO));
20 bmi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
21 bmi.bmiHeader.biWidth = width;
22 bmi.bmiHeader.biHeight = height;
23 bmi.bmiHeader.biPlanes = 1;
24 bmi.bmiHeader.biBitCount = 24;
25 bmi.bmiHeader.biCompression = BI_RGB;
26 return CreateDIBSection(NULL, &bmi, DIB_RGB_COLORS, NULL, NULL, 0);
27 }
28
29 int
30 GetDIBWidth(HBITMAP hBitmap)
31 {
32 BITMAP bm;
33 GetObject(hBitmap, sizeof(BITMAP), &bm);
34 return bm.bmWidth;
35 }
36
37 int
38 GetDIBHeight(HBITMAP hBitmap)
39 {
40 BITMAP bm;
41 GetObject(hBitmap, sizeof(BITMAP), &bm);
42 return bm.bmHeight;
43 }
44
45 void
46 SaveDIBToFile(HBITMAP hBitmap, LPTSTR FileName, HDC hDC, LPSYSTEMTIME time, int *size, int hRes, int vRes)
47 {
48 CImage img;
49 img.Attach(hBitmap);
50 img.Save(FileName); // TODO: error handling
51 img.Detach();
52
53 // update time and size
54
55 HANDLE hFile =
56 CreateFile(FileName, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_FLAG_SEQUENTIAL_SCAN, NULL);
57 if (hFile == INVALID_HANDLE_VALUE)
58 return;
59
60 if (time)
61 {
62 FILETIME ft;
63 GetFileTime(hFile, NULL, NULL, &ft);
64 FileTimeToSystemTime(&ft, time);
65 }
66 if (size)
67 *size = GetFileSize(hFile, NULL);
68
69 // TODO: update hRes and vRes
70
71 CloseHandle(hFile);
72 }
73
74 void ShowFileLoadError(LPCTSTR name)
75 {
76 CString strText;
77 strText.Format(IDS_LOADERRORTEXT, (LPCTSTR) name);
78 CString strProgramName;
79 strProgramName.LoadString(IDS_PROGRAMNAME);
80 mainWindow.MessageBox(strText, strProgramName, MB_OK | MB_ICONEXCLAMATION);
81 }
82
83 void
84 LoadDIBFromFile(HBITMAP * hBitmap, LPCTSTR name, LPSYSTEMTIME time, int *size, int *hRes, int *vRes)
85 {
86 CImage img;
87 img.Load(name); // TODO: error handling
88
89 if (!hBitmap)
90 {
91 ShowFileLoadError(name);
92 return;
93 }
94
95 *hBitmap = img.Detach();
96
97 // update time and size
98 HANDLE hFile =
99 CreateFile(name, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_FLAG_SEQUENTIAL_SCAN, NULL);
100 if (hFile == INVALID_HANDLE_VALUE)
101 {
102 ShowFileLoadError(name);
103 return;
104 }
105
106 if (time)
107 {
108 FILETIME ft;
109 GetFileTime(hFile, NULL, NULL, &ft);
110 FileTimeToSystemTime(&ft, time);
111 }
112 if (size)
113 *size = GetFileSize(hFile, NULL);
114
115 // TODO: update hRes and vRes
116
117 CloseHandle(hFile);
118 }