7 AdjustBrightness(HBITMAP hOrigBitmap
,
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;
33 bi
.bmiHeader
.biCompression
= BI_RGB
;
34 bi
.bmiHeader
.biSizeImage
= bitmap
.bmWidth
* bitmap
.bmHeight
* 4;
35 bi
.bmiHeader
.biClrUsed
= 0;
36 bi
.bmiHeader
.biClrImportant
= 0;
39 pBits
= (PBYTE
)HeapAlloc(ProcessHeap
,
41 bitmap
.bmWidth
* bitmap
.bmHeight
* 4);
45 /* get the bits from the original bitmap */
46 bRes
= GetDIBits(hdcMem
,
54 for (i
= 0; i
< bitmap
.bmHeight
; i
++)
56 for (j
= 0; j
< bitmap
.bmWidth
; j
++)
65 /* Get pixels in reverse order */
73 else if (r
< 0) r
= 0;
78 else if (g
< 0) g
= 0;
83 else if (b
< 0) b
= 0;
85 /* Store in reverse order */
87 CopyMemory(&pBits
[Count
],
91 /* RGB color take 4 bytes.The high-order byte must be zero */
96 /* Set the new pixel bits */
105 HeapFree(ProcessHeap
,
119 Bri_OnInitDialog(PIMAGEADJUST pImgAdj
,
123 pImgAdj
= (IMAGEADJUST
*) HeapAlloc(ProcessHeap
,
125 sizeof(IMAGEADJUST
));
130 pImgAdj
->Info
= (PMAIN_WND_INFO
)lParam
;
131 if (!pImgAdj
->Info
->ImageEditors
)
135 pImgAdj
->hPicPrev
= GetDlgItem(hDlg
, IDC_PICPREVIEW
);
136 GetClientRect(pImgAdj
->hPicPrev
,
137 &pImgAdj
->ImageRect
);
139 /* Make a static copy of the main image */
140 pImgAdj
->hBitmap
= (HBITMAP
) CopyImage(pImgAdj
->Info
->ImageEditors
->hBitmap
,
142 pImgAdj
->ImageRect
.right
,
143 pImgAdj
->ImageRect
.bottom
,
144 LR_CREATEDIBSECTION
);
145 if (!pImgAdj
->hBitmap
)
148 /* Make a copy which will be updated */
149 pImgAdj
->hPreviewBitmap
= (HBITMAP
) CopyImage(pImgAdj
->Info
->ImageEditors
->hBitmap
,
151 pImgAdj
->ImageRect
.right
,
152 pImgAdj
->ImageRect
.bottom
,
153 LR_CREATEDIBSECTION
);
154 if (!pImgAdj
->hPreviewBitmap
)
158 pImgAdj
->RedVal
= pImgAdj
->BlueVal
= pImgAdj
->GreenVal
= 0;
161 SendDlgItemMessage(hDlg
,
166 SendDlgItemMessage(hDlg
,
170 (LPARAM
)MAKELONG(0, 200));
171 SendDlgItemMessage(hDlg
,
183 HeapFree(ProcessHeap
,
191 Bri_OnDrawItem(PIMAGEADJUST pImgAdj
,
194 LPDRAWITEMSTRUCT lpDrawItem
;
197 lpDrawItem
= (LPDRAWITEMSTRUCT
)lParam
;
199 hdcMem
= CreateCompatibleDC(lpDrawItem
->hDC
);
201 if(lpDrawItem
->CtlID
== IDC_PICPREVIEW
)
204 pImgAdj
->hPreviewBitmap
);
206 BitBlt(lpDrawItem
->hDC
,
207 pImgAdj
->ImageRect
.left
,
208 pImgAdj
->ImageRect
.top
,
209 pImgAdj
->ImageRect
.right
,
210 pImgAdj
->ImageRect
.bottom
,
222 Bri_OnTrackBar(PIMAGEADJUST pImgAdj
,
228 TrackPos
= (DWORD
)SendDlgItemMessage(hDlg
,
239 if (IsDlgButtonChecked(hDlg
, IDC_BRI_FULL
) == BST_CHECKED
)
241 pImgAdj
->RedVal
= pImgAdj
->GreenVal
= pImgAdj
->BlueVal
= TrackPos
- BASECOLOUR
;
243 else if (IsDlgButtonChecked(hDlg
, IDC_BRI_RED
) == BST_CHECKED
)
245 pImgAdj
->RedVal
= TrackPos
- BASECOLOUR
;
247 else if (IsDlgButtonChecked(hDlg
, IDC_BRI_GREEN
) == BST_CHECKED
)
249 pImgAdj
->GreenVal
= TrackPos
- BASECOLOUR
;
251 else if (IsDlgButtonChecked(hDlg
, IDC_BRI_BLUE
) == BST_CHECKED
)
253 pImgAdj
->BlueVal
= TrackPos
- BASECOLOUR
;
256 hdcMem
= GetDC(pImgAdj
->hPicPrev
);
258 AdjustBrightness(pImgAdj
->hBitmap
,
259 pImgAdj
->hPreviewBitmap
,
266 ReleaseDC(pImgAdj
->hPicPrev
, hdcMem
);
271 Bri_OnCommand(PIMAGEADJUST pImgAdj
,
281 hdcMem
= GetDC(pImgAdj
->Info
->ImageEditors
->hSelf
);
283 AdjustBrightness(pImgAdj
->Info
->ImageEditors
->hBitmap
,
284 pImgAdj
->Info
->ImageEditors
->hBitmap
,
285 pImgAdj
->Info
->ImageEditors
->hSelf
,
291 ReleaseDC(pImgAdj
->Info
->ImageEditors
->hSelf
,
313 BrightnessProc(HWND hDlg
,
318 static PIMAGEADJUST pImgAdj
= NULL
;
324 pImgAdj
= Bri_OnInitDialog(pImgAdj
,
338 Bri_OnDrawItem(pImgAdj
,
345 if (LOWORD(wParam
) == TB_THUMBTRACK
||
346 LOWORD(wParam
) == TB_ENDTRACK
)
348 Bri_OnTrackBar(pImgAdj
,
357 return Bri_OnCommand(pImgAdj
,
366 if (pImgAdj
->hBitmap
)
367 DeleteObject(pImgAdj
->hBitmap
);
368 if (pImgAdj
->hPreviewBitmap
)
369 DeleteObject(pImgAdj
->hPreviewBitmap
);
371 HeapFree(ProcessHeap
,