2 * PROJECT: PAINT for ReactOS
4 * FILE: base/applications/mspaint/dib.cpp
5 * PURPOSE: Some DIB related functions
6 * PROGRAMMERS: Benedikt Freisen
9 /* INCLUDES *********************************************************/
13 /* FUNCTIONS ********************************************************/
16 CreateDIBWithProperties(int width
, int height
)
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);
30 GetDIBWidth(HBITMAP hBitmap
)
33 GetObject(hBitmap
, sizeof(BITMAP
), &bm
);
38 GetDIBHeight(HBITMAP hBitmap
)
41 GetObject(hBitmap
, sizeof(BITMAP
), &bm
);
46 SaveDIBToFile(HBITMAP hBitmap
, LPTSTR FileName
, HDC hDC
, LPSYSTEMTIME time
, int *size
, int hRes
, int vRes
)
50 img
.Save(FileName
); // TODO: error handling
53 // update time and size
56 CreateFile(FileName
, GENERIC_READ
, FILE_SHARE_READ
, NULL
, OPEN_EXISTING
, FILE_FLAG_SEQUENTIAL_SCAN
, NULL
);
57 if (hFile
== INVALID_HANDLE_VALUE
)
63 GetFileTime(hFile
, NULL
, NULL
, &ft
);
64 FileTimeToSystemTime(&ft
, time
);
67 *size
= GetFileSize(hFile
, NULL
);
69 // TODO: update hRes and vRes
74 void ShowFileLoadError(LPCTSTR name
)
77 strText
.Format(IDS_LOADERRORTEXT
, (LPCTSTR
) name
);
78 CString strProgramName
;
79 strProgramName
.LoadString(IDS_PROGRAMNAME
);
80 mainWindow
.MessageBox(strText
, strProgramName
, MB_OK
| MB_ICONEXCLAMATION
);
84 LoadDIBFromFile(HBITMAP
* hBitmap
, LPCTSTR name
, LPSYSTEMTIME time
, int *size
, int *hRes
, int *vRes
)
86 using namespace Gdiplus
;
87 Bitmap
img(CStringW(name
), FALSE
); // always use WCHAR string
91 ShowFileLoadError(name
);
95 img
.GetHBITMAP(Color(255, 255, 255), hBitmap
);
97 // update time and size
99 CreateFile(name
, GENERIC_READ
, FILE_SHARE_READ
, NULL
, OPEN_EXISTING
, FILE_FLAG_SEQUENTIAL_SCAN
, NULL
);
100 if (hFile
== INVALID_HANDLE_VALUE
)
102 ShowFileLoadError(name
);
109 GetFileTime(hFile
, NULL
, NULL
, &ft
);
110 FileTimeToSystemTime(&ft
, time
);
113 *size
= GetFileSize(hFile
, NULL
);
115 // update hRes and vRes
116 *hRes
= (int) (img
.GetHorizontalResolution() * 1000 / 25.4);
117 *vRes
= (int) (img
.GetVerticalResolution() * 1000 / 25.4);