7 AdjustContrast(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 */
70 r
= ((r
- 128) * RedVal
) / 100 + 128;
71 g
= ((g
- 128) * GreenVal
) / 100 + 128;
72 b
= ((b
- 128) * BlueVal
) / 100 + 128;
76 else if (r
< 0) r
= 0;
80 else if (g
< 0) g
= 0;
84 else if (b
< 0) b
= 0;
86 /* Store in reverse order */
88 CopyMemory(&pBits
[Count
],
92 /* RGB color take 4 bytes.The high-order byte must be zero */
97 /* Set the new pixel bits */
106 HeapFree(ProcessHeap
,
120 Cont_OnInitDialog(PIMAGEADJUST pImgAdj
,
124 pImgAdj
= (IMAGEADJUST
*) HeapAlloc(ProcessHeap
,
126 sizeof(IMAGEADJUST
));
131 pImgAdj
->Info
= (PMAIN_WND_INFO
)lParam
;
132 if (!pImgAdj
->Info
->ImageEditors
)
136 pImgAdj
->hPicPrev
= GetDlgItem(hDlg
, IDC_PICPREVIEW
);
137 GetClientRect(pImgAdj
->hPicPrev
,
138 &pImgAdj
->ImageRect
);
140 /* Make a static copy of the main image */
141 pImgAdj
->hBitmap
= (HBITMAP
) CopyImage(pImgAdj
->Info
->ImageEditors
->hBitmap
,
143 pImgAdj
->ImageRect
.right
,
144 pImgAdj
->ImageRect
.bottom
,
145 LR_CREATEDIBSECTION
);
146 if (!pImgAdj
->hBitmap
)
149 /* Make a copy which will be updated */
150 pImgAdj
->hPreviewBitmap
= (HBITMAP
) CopyImage(pImgAdj
->Info
->ImageEditors
->hBitmap
,
152 pImgAdj
->ImageRect
.right
,
153 pImgAdj
->ImageRect
.bottom
,
154 LR_CREATEDIBSECTION
);
155 if (!pImgAdj
->hPreviewBitmap
)
159 pImgAdj
->RedVal
= pImgAdj
->BlueVal
= pImgAdj
->GreenVal
= 100;
162 SendDlgItemMessage(hDlg
,
167 SendDlgItemMessage(hDlg
,
171 (LPARAM
)MAKELONG(0, 200));
172 SendDlgItemMessage(hDlg
,
184 HeapFree(ProcessHeap
,
192 Cont_OnDrawItem(PIMAGEADJUST pImgAdj
,
195 LPDRAWITEMSTRUCT lpDrawItem
;
198 lpDrawItem
= (LPDRAWITEMSTRUCT
)lParam
;
200 hdcMem
= CreateCompatibleDC(lpDrawItem
->hDC
);
202 if(lpDrawItem
->CtlID
== IDC_PICPREVIEW
)
205 pImgAdj
->hPreviewBitmap
);
207 BitBlt(lpDrawItem
->hDC
,
208 pImgAdj
->ImageRect
.left
,
209 pImgAdj
->ImageRect
.top
,
210 pImgAdj
->ImageRect
.right
,
211 pImgAdj
->ImageRect
.bottom
,
223 Cont_OnTrackBar(PIMAGEADJUST pImgAdj
,
229 TrackPos
= (DWORD
)SendDlgItemMessage(hDlg
,
240 if (IsDlgButtonChecked(hDlg
, IDC_BRI_FULL
) == BST_CHECKED
)
242 pImgAdj
->RedVal
= pImgAdj
->GreenVal
= pImgAdj
->BlueVal
= TrackPos
- BASECOLOUR
+ 100;
244 else if (IsDlgButtonChecked(hDlg
, IDC_BRI_RED
) == BST_CHECKED
)
246 pImgAdj
->RedVal
= TrackPos
- BASECOLOUR
+ 100;
248 else if (IsDlgButtonChecked(hDlg
, IDC_BRI_GREEN
) == BST_CHECKED
)
250 pImgAdj
->GreenVal
= TrackPos
- BASECOLOUR
+ 100;
252 else if (IsDlgButtonChecked(hDlg
, IDC_BRI_BLUE
) == BST_CHECKED
)
254 pImgAdj
->BlueVal
= TrackPos
- BASECOLOUR
+ 100;
257 hdcMem
= GetDC(pImgAdj
->hPicPrev
);
259 AdjustContrast(pImgAdj
->hBitmap
,
260 pImgAdj
->hPreviewBitmap
,
267 ReleaseDC(pImgAdj
->hPicPrev
, hdcMem
);
272 Cont_OnCommand(PIMAGEADJUST pImgAdj
,
282 hdcMem
= GetDC(pImgAdj
->Info
->ImageEditors
->hSelf
);
284 AdjustContrast(pImgAdj
->Info
->ImageEditors
->hBitmap
,
285 pImgAdj
->Info
->ImageEditors
->hBitmap
,
286 pImgAdj
->Info
->ImageEditors
->hSelf
,
292 ReleaseDC(pImgAdj
->Info
->ImageEditors
->hSelf
,
314 ContrastProc(HWND hDlg
,
319 static PIMAGEADJUST pImgAdj
= NULL
;
325 pImgAdj
= Cont_OnInitDialog(pImgAdj
,
339 Cont_OnDrawItem(pImgAdj
,
346 if (LOWORD(wParam
) == TB_THUMBTRACK
||
347 LOWORD(wParam
) == TB_ENDTRACK
)
349 Cont_OnTrackBar(pImgAdj
,
358 return Cont_OnCommand(pImgAdj
,
367 if (pImgAdj
->hBitmap
)
368 DeleteObject(pImgAdj
->hBitmap
);
369 if (pImgAdj
->hPreviewBitmap
)
370 DeleteObject(pImgAdj
->hPreviewBitmap
);
372 HeapFree(ProcessHeap
,