ReactOS  0.4.13-dev-563-g0561610
brightness.c
Go to the documentation of this file.
1 #include "precomp.h"
2 
3 #define BASECOLOUR 100
4 
5 
6 VOID
8  HBITMAP hNewBitmap,
9  HWND hwnd,
10  HDC hdcMem,
11  INT RedVal,
12  INT GreenVal,
13  INT BlueVal)
14 {
15  BITMAPINFO bi;
16  BITMAP bitmap;
17  BOOL bRes;
18  DWORD Count = 0;
19  INT i, j;
20  PBYTE pBits;
21  RECT rc;
22 
23  GetObject(hNewBitmap,
24  sizeof(BITMAP),
25  &bitmap);
26 
27  /* Bitmap header */
28  bi.bmiHeader.biSize = sizeof(bi.bmiHeader);
29  bi.bmiHeader.biWidth = bitmap.bmWidth;
30  bi.bmiHeader.biHeight = bitmap.bmHeight;
31  bi.bmiHeader.biPlanes = 1;
32  bi.bmiHeader.biBitCount = 32;
34  bi.bmiHeader.biSizeImage = bitmap.bmWidth * bitmap.bmHeight * 4;
35  bi.bmiHeader.biClrUsed = 0;
37 
38  /* Buffer */
39  pBits = (PBYTE)HeapAlloc(ProcessHeap,
40  0,
41  bitmap.bmWidth * bitmap.bmHeight * 4);
42  if (!pBits)
43  return;
44 
45  /* get the bits from the original bitmap */
46  bRes = GetDIBits(hdcMem,
47  hOrigBitmap,
48  0,
49  bitmap.bmHeight,
50  pBits,
51  &bi,
53 
54  for (i = 0; i < bitmap.bmHeight; i++)
55  {
56  for (j = 0; j < bitmap.bmWidth; j++)
57  {
58  DWORD Val = 0;
59  INT b, g, r;
60 
61  CopyMemory(&Val,
62  &pBits[Count],
63  4);
64 
65  /* Get pixels in reverse order */
66  b = GetRValue(Val);
67  g = GetGValue(Val);
68  r = GetBValue(Val);
69 
70  /* Red */
71  r += RedVal;
72  if (r > 255) r = 255;
73  else if (r < 0) r = 0;
74 
75  /* Green */
76  g += GreenVal;
77  if (g > 255) g = 255;
78  else if (g < 0) g = 0;
79 
80  /* Blue */
81  b += BlueVal;
82  if (b > 255) b = 255;
83  else if (b < 0) b = 0;
84 
85  /* Store in reverse order */
86  Val = RGB(b, g, r);
87  CopyMemory(&pBits[Count],
88  &Val,
89  4);
90 
91  /* RGB color take 4 bytes.The high-order byte must be zero */
92  Count += 4;
93  }
94  }
95 
96  /* Set the new pixel bits */
98  hNewBitmap,
99  0,
100  bRes,
101  pBits,
102  &bi,
104 
106  0,
107  pBits);
108 
110  &rc);
111 
113  &rc,
114  FALSE);
115 }
116 
117 
118 static PIMAGEADJUST
120  HWND hDlg,
121  LPARAM lParam)
122 {
123  pImgAdj = (IMAGEADJUST*) HeapAlloc(ProcessHeap,
124  0,
125  sizeof(IMAGEADJUST));
126  if (!pImgAdj)
127  return NULL;
128 
129 
130  pImgAdj->Info = (PMAIN_WND_INFO)lParam;
131  if (!pImgAdj->Info->ImageEditors)
132  goto fail;
133 
134 
135  pImgAdj->hPicPrev = GetDlgItem(hDlg, IDC_PICPREVIEW);
136  GetClientRect(pImgAdj->hPicPrev,
137  &pImgAdj->ImageRect);
138 
139  /* Make a static copy of the main image */
140  pImgAdj->hBitmap = (HBITMAP) CopyImage(pImgAdj->Info->ImageEditors->hBitmap,
141  IMAGE_BITMAP,
142  pImgAdj->ImageRect.right,
143  pImgAdj->ImageRect.bottom,
145  if (!pImgAdj->hBitmap)
146  goto fail;
147 
148  /* Make a copy which will be updated */
149  pImgAdj->hPreviewBitmap = (HBITMAP) CopyImage(pImgAdj->Info->ImageEditors->hBitmap,
150  IMAGE_BITMAP,
151  pImgAdj->ImageRect.right,
152  pImgAdj->ImageRect.bottom,
154  if (!pImgAdj->hPreviewBitmap)
155  goto fail;
156 
157 
158  pImgAdj->RedVal = pImgAdj->BlueVal = pImgAdj->GreenVal = 0;
159 
160  /* setup dialog */
161  SendDlgItemMessage(hDlg,
162  IDC_BRI_FULL,
163  BM_SETCHECK,
164  BST_CHECKED,
165  0);
166  SendDlgItemMessage(hDlg,
168  TBM_SETRANGE,
169  TRUE,
170  (LPARAM)MAKELONG(0, 200));
171  SendDlgItemMessage(hDlg,
173  TBM_SETPOS,
174  TRUE,
175  (LPARAM)BASECOLOUR);
176  SetDlgItemText(hDlg,
177  IDC_BRI_EDIT,
178  _T("100"));
179 
180  return pImgAdj;
181 
182 fail:
184  0,
185  pImgAdj);
186  return NULL;
187 }
188 
189 
190 static VOID
192  LPARAM lParam)
193 {
194  LPDRAWITEMSTRUCT lpDrawItem;
195  HDC hdcMem;
196 
197  lpDrawItem = (LPDRAWITEMSTRUCT)lParam;
198 
199  hdcMem = CreateCompatibleDC(lpDrawItem->hDC);
200 
201  if(lpDrawItem->CtlID == IDC_PICPREVIEW)
202  {
204  pImgAdj->hPreviewBitmap);
205 
206  BitBlt(lpDrawItem->hDC,
207  pImgAdj->ImageRect.left,
208  pImgAdj->ImageRect.top,
209  pImgAdj->ImageRect.right,
210  pImgAdj->ImageRect.bottom,
211  hdcMem,
212  0,
213  0,
214  SRCCOPY);
215 
216  DeleteDC(hdcMem);
217  }
218 }
219 
220 
221 static VOID
223  HWND hDlg)
224 {
225  HDC hdcMem;
226  DWORD TrackPos;
227 
228  TrackPos = (DWORD)SendDlgItemMessage(hDlg,
230  TBM_GETPOS,
231  0,
232  0);
233 
234  SetDlgItemInt(hDlg,
235  IDC_BRI_EDIT,
236  TrackPos,
237  FALSE);
238 
240  {
241  pImgAdj->RedVal = pImgAdj->GreenVal = pImgAdj->BlueVal = TrackPos - BASECOLOUR;
242  }
243  else if (IsDlgButtonChecked(hDlg, IDC_BRI_RED) == BST_CHECKED)
244  {
245  pImgAdj->RedVal = TrackPos - BASECOLOUR;
246  }
247  else if (IsDlgButtonChecked(hDlg, IDC_BRI_GREEN) == BST_CHECKED)
248  {
249  pImgAdj->GreenVal = TrackPos - BASECOLOUR;
250  }
251  else if (IsDlgButtonChecked(hDlg, IDC_BRI_BLUE) == BST_CHECKED)
252  {
253  pImgAdj->BlueVal = TrackPos - BASECOLOUR;
254  }
255 
256  hdcMem = GetDC(pImgAdj->hPicPrev);
257 
258  AdjustBrightness(pImgAdj->hBitmap,
259  pImgAdj->hPreviewBitmap,
260  pImgAdj->hPicPrev,
261  hdcMem,
262  pImgAdj->RedVal,
263  pImgAdj->GreenVal,
264  pImgAdj->BlueVal);
265 
266  ReleaseDC(pImgAdj->hPicPrev, hdcMem);
267 }
268 
269 
270 static BOOL
272  HWND hDlg,
273  UINT uID)
274 {
275  switch (uID)
276  {
277  case IDOK:
278  {
279  HDC hdcMem;
280 
281  hdcMem = GetDC(pImgAdj->Info->ImageEditors->hSelf);
282 
284  pImgAdj->Info->ImageEditors->hBitmap,
285  pImgAdj->Info->ImageEditors->hSelf,
286  hdcMem,
287  pImgAdj->RedVal,
288  pImgAdj->GreenVal,
289  pImgAdj->BlueVal);
290 
291  ReleaseDC(pImgAdj->Info->ImageEditors->hSelf,
292  hdcMem);
293 
294  EndDialog(hDlg,
295  uID);
296 
297  return TRUE;
298  }
299 
300  case IDCANCEL:
301  {
302  EndDialog(hDlg,
303  uID);
304  return TRUE;
305  }
306  }
307 
308  return FALSE;
309 }
310 
311 
314  UINT message,
315  WPARAM wParam,
316  LPARAM lParam)
317 {
318  static PIMAGEADJUST pImgAdj = NULL;
319 
320  switch (message)
321  {
322  case WM_INITDIALOG:
323  {
324  pImgAdj = Bri_OnInitDialog(pImgAdj,
325  hDlg,
326  lParam);
327  if (!pImgAdj)
328  {
329  EndDialog(hDlg, -1);
330  return FALSE;
331  }
332 
333  return TRUE;
334  }
335 
336  case WM_DRAWITEM:
337  {
338  Bri_OnDrawItem(pImgAdj,
339  lParam);
340  return TRUE;
341  }
342 
343  case WM_HSCROLL:
344  {
345  if (LOWORD(wParam) == TB_THUMBTRACK ||
347  {
348  Bri_OnTrackBar(pImgAdj,
349  hDlg);
350  }
351 
352  return TRUE;
353  }
354 
355  case WM_COMMAND:
356  {
357  return Bri_OnCommand(pImgAdj,
358  hDlg,
359  LOWORD(wParam));
360  }
361 
362  case WM_DESTROY:
363  {
364  if (pImgAdj)
365  {
366  if (pImgAdj->hBitmap)
367  DeleteObject(pImgAdj->hBitmap);
368  if (pImgAdj->hPreviewBitmap)
369  DeleteObject(pImgAdj->hPreviewBitmap);
370 
372  0,
373  pImgAdj);
374  }
375  }
376  }
377 
378  return FALSE;
379 }
#define TB_THUMBTRACK
Definition: commctrl.h:2050
const DOCKBAR PVOID HWND HWND * hwnd
Definition: tooldock.h:22
Definition: tftpd.h:59
#define TRUE
Definition: types.h:120
#define IDOK
Definition: winuser.h:824
#define IDC_BRI_GREEN
Definition: resource.h:258
BITMAPINFOHEADER bmiHeader
Definition: wingdi.h:1454
DWORD biClrImportant
Definition: amvideo.idl:40
struct tagDRAWITEMSTRUCT * LPDRAWITEMSTRUCT
HDC WINAPI GetDC(_In_opt_ HWND)
GLdouble GLdouble GLdouble r
Definition: gl.h:2055
#define IDC_BRI_RED
Definition: resource.h:257
static HDC
Definition: imagelist.c:92
#define CALLBACK
Definition: compat.h:27
#define GetRValue(rgb)
Definition: wingdi.h:2913
#define TBM_SETRANGE
Definition: commctrl.h:2009
LONG top
Definition: windef.h:292
#define IDC_BRI_FULL
Definition: resource.h:256
HGDIOBJ WINAPI SelectObject(_In_ HDC, _In_ HGDIOBJ)
Definition: dc.c:1497
_Inout_ __drv_aliasesMem PSLIST_ENTRY _Inout_ PSLIST_ENTRY _In_ ULONG Count
Definition: exfuncs.h:1015
BOOL WINAPI DeleteObject(_In_ HGDIOBJ)
#define TBM_SETPOS
Definition: commctrl.h:2008
HDC WINAPI CreateCompatibleDC(_In_opt_ HDC hdc)
UINT_PTR WPARAM
Definition: windef.h:207
#define SendDlgItemMessage
Definition: winuser.h:5708
LONG left
Definition: windef.h:291
int32_t INT_PTR
Definition: typedefs.h:62
LONG right
Definition: windef.h:293
static VOID NTAPI BitBlt(IN ULONG Left, IN ULONG Top, IN ULONG Width, IN ULONG Height, IN PUCHAR Buffer, IN ULONG BitsPerPixel, IN ULONG Delta)
Definition: vga.c:410
#define DWORD
Definition: nt_native.h:44
int32_t INT
Definition: typedefs.h:56
HWND hPicPrev
Definition: imageprop.h:5
WPARAM wParam
Definition: combotst.c:138
BOOL WINAPI EndDialog(_In_ HWND, _In_ INT_PTR)
VOID AdjustBrightness(HBITMAP hOrigBitmap, HBITMAP hNewBitmap, HWND hwnd, HDC hdcMem, INT RedVal, INT GreenVal, INT BlueVal)
Definition: brightness.c:7
#define GetGValue(rgb)
Definition: wingdi.h:2914
RECT ImageRect
Definition: imageprop.h:8
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
static VOID Bri_OnTrackBar(PIMAGEADJUST pImgAdj, HWND hDlg)
Definition: brightness.c:222
PMAIN_WND_INFO Info
Definition: imageprop.h:4
unsigned int BOOL
Definition: ntddk_ex.h:94
#define TBM_GETPOS
Definition: commctrl.h:2003
int WINAPI ReleaseDC(_In_opt_ HWND, _In_ HDC)
HANDLE WINAPI CopyImage(_In_ HANDLE, _In_ UINT, _In_ int, _In_ int, _In_ UINT)
Definition: cursoricon.c:1956
DWORD biCompression
Definition: amvideo.idl:35
#define MAKELONG(a, b)
Definition: typedefs.h:248
smooth NULL
Definition: ftsmooth.c:416
LONG_PTR LPARAM
Definition: windef.h:208
UINT WINAPI IsDlgButtonChecked(_In_ HWND, _In_ int)
#define b
Definition: ke_i.h:79
#define IDC_BRI_BLUE
Definition: resource.h:259
#define WM_DESTROY
Definition: winuser.h:1591
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint GLint GLint j
Definition: glfuncs.h:250
Definition: uimain.c:88
GLboolean GLboolean g
Definition: glext.h:6204
#define BM_SETCHECK
Definition: winuser.h:1882
GLboolean GLboolean GLboolean b
Definition: glext.h:6204
#define _T(x)
Definition: vfdio.h:22
#define BASECOLOUR
Definition: brightness.c:3
INT_PTR CALLBACK BrightnessProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
Definition: brightness.c:313
static VOID Bri_OnDrawItem(PIMAGEADJUST pImgAdj, LPARAM lParam)
Definition: brightness.c:191
PVOID WINAPI HeapAlloc(HANDLE, DWORD, SIZE_T)
HWND WINAPI GetDlgItem(_In_opt_ HWND, _In_ int)
#define RGB(r, g, b)
Definition: wingdi.h:2918
struct _MAIN_WND_INFO * PMAIN_WND_INFO
BOOL WINAPI InvalidateRect(_In_opt_ HWND, _In_opt_ LPCRECT, _In_ BOOL)
#define CopyMemory
Definition: winbase.h:1633
unsigned long DWORD
Definition: ntddk_ex.h:95
DWORD biSizeImage
Definition: amvideo.idl:36
static PIMAGEADJUST Bri_OnInitDialog(PIMAGEADJUST pImgAdj, HWND hDlg, LPARAM lParam)
Definition: brightness.c:119
#define GetObject
Definition: wingdi.h:4446
#define SetDlgItemText
Definition: winuser.h:5715
#define TB_ENDTRACK
Definition: commctrl.h:2053
BOOL WINAPI SetDlgItemInt(_In_ HWND, _In_ int, _In_ UINT, _In_ BOOL)
#define IDC_PICPREVIEW
Definition: resource.h:251
#define WM_COMMAND
Definition: winuser.h:1716
HBITMAP hBitmap
Definition: imgedwnd.h:67
HANDLE ProcessHeap
Definition: servman.c:15
#define IDC_BRI_TRACKBAR
Definition: resource.h:261
BOOL WINAPI GetClientRect(_In_ HWND, _Out_ LPRECT)
#define IDC_BRI_EDIT
Definition: resource.h:260
static BOOL Bri_OnCommand(PIMAGEADJUST pImgAdj, HWND hDlg, UINT uID)
Definition: brightness.c:271
BOOL WINAPI DeleteDC(_In_ HDC)
Definition: bl.h:1331
#define LR_CREATEDIBSECTION
Definition: winuser.h:1088
HBITMAP hPreviewBitmap
Definition: imageprop.h:7
INT GreenVal
Definition: imageprop.h:10
unsigned int UINT
Definition: ndis.h:50
#define WM_HSCROLL
Definition: winuser.h:1719
#define IMAGE_BITMAP
Definition: winuser.h:211
INT RedVal
Definition: imageprop.h:9
#define BST_CHECKED
Definition: winuser.h:197
#define WM_DRAWITEM
Definition: winuser.h:1627
int WINAPI GetDIBits(_In_ HDC hdc, _In_ HBITMAP hbm, _In_ UINT start, _In_ UINT cLines, _Out_opt_ LPVOID lpvBits, _At_((LPBITMAPINFOHEADER) lpbmi, _Inout_) LPBITMAPINFO lpbmi, _In_ UINT usage)
LONG bottom
Definition: windef.h:294
#define GetBValue(rgb)
Definition: wingdi.h:2915
static HBITMAP bitmap
Definition: clipboard.c:1344
static HBITMAP
Definition: button.c:44
#define IDCANCEL
Definition: winuser.h:825
#define DIB_RGB_COLORS
Definition: wingdi.h:366
int WINAPI SetDIBits(_In_opt_ HDC, _In_ HBITMAP, _In_ UINT, _In_ UINT, _In_ CONST VOID *, _In_ CONST BITMAPINFO *, _In_ UINT)
BYTE * PBYTE
Definition: pedump.c:66
#define WM_INITDIALOG
Definition: winuser.h:1715
#define BI_RGB
Definition: precomp.h:34
LPARAM lParam
Definition: combotst.c:139
PEDIT_WND_INFO ImageEditors
Definition: mainwnd.h:22
#define LOWORD(l)
Definition: pedump.c:82
#define HeapFree(x, y, z)
Definition: compat.h:394
#define SRCCOPY
Definition: wingdi.h:332
HBITMAP hBitmap
Definition: imageprop.h:6
HDC hdcMem
Definition: welcome.c:104