ReactOS 0.4.16-dev-979-g79f281e
dib.cpp
Go to the documentation of this file.
1/*
2 * PROJECT: PAINT for ReactOS
3 * LICENSE: LGPL-2.0-or-later (https://spdx.org/licenses/LGPL-2.0-or-later)
4 * PURPOSE: Some DIB related functions
5 * COPYRIGHT: Copyright 2015 Benedikt Freisen <b.freisen@gmx.net>
6 */
7
8#include "precomp.h"
9
11float g_xDpi = 96;
12float g_yDpi = 96;
14
15#define WIDTHBYTES(i) (((i) + 31) / 32 * 4)
16
18{
20};
21
22/* FUNCTIONS ********************************************************/
23
24// Convert DPI (dots per inch) into PPCM (pixels per centimeter)
25float PpcmFromDpi(float dpi)
26{
27 // 1 DPI is 0.0254 meter. 1 centimeter is 1/100 meter.
28 return dpi / (0.0254f * 100.0f);
29}
30
33{
34 BITMAPINFO bmi;
35 ZeroMemory(&bmi, sizeof(BITMAPINFO));
36 bmi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
39 bmi.bmiHeader.biPlanes = 1;
40 bmi.bmiHeader.biBitCount = 24;
41 return CreateDIBSection(NULL, &bmi, DIB_RGB_COLORS, NULL, NULL, 0);
42}
43
46{
48 if (hbm == NULL)
49 return NULL;
50
51 if (bWhite)
52 {
54 HGDIOBJ hbmOld = SelectObject(hdc, hbm);
55 RECT rc = { 0, 0, width, height };
56 FillRect(hdc, &rc, (HBRUSH)GetStockObject(WHITE_BRUSH));
57 SelectObject(hdc, hbmOld);
59 }
60
61 return hbm;
62}
63
66{
68 if (!ret)
69 return NULL;
70
71 if (rgb)
72 {
74 HGDIOBJ hbmOld = SelectObject(hdc, ret);
75 RECT rc;
76 SetRect(&rc, 0, 0, width, height);
77 HBRUSH hbr = CreateSolidBrush(rgb);
78 FillRect(hdc, &rc, hbr);
79 DeleteObject(hbr);
80 SelectObject(hdc, hbmOld);
82 }
83
84 return ret;
85}
86
88{
89 BITMAP bm;
90 if (!::GetObjectW(hbm, sizeof(bm), &bm))
91 return NULL;
92
93 if (cx == 0 || cy == 0)
94 {
95 cx = bm.bmWidth;
96 cy = bm.bmHeight;
97 }
98
99 HBITMAP hbmNew = ::CreateBitmap(cx, cy, 1, 1, NULL);
100 if (!hbmNew)
101 return NULL;
102
105 HGDIOBJ hbm1Old = ::SelectObject(hdc1, hbm);
106 HGDIOBJ hbm2Old = ::SelectObject(hdc2, hbmNew);
107 ::StretchBlt(hdc2, 0, 0, cx, cy, hdc1, 0, 0, bm.bmWidth, bm.bmHeight, SRCCOPY);
108 ::SelectObject(hdc1, hbm1Old);
109 ::SelectObject(hdc2, hbm2Old);
112 return hbmNew;
113}
114
115HBITMAP CachedBufferDIB(HBITMAP hbm, int minimalWidth, int minimalHeight)
116{
117 if (minimalWidth <= 0)
118 minimalWidth = 1;
119 if (minimalHeight <= 0)
120 minimalHeight = 1;
121
122 BITMAP bm;
123 if (!GetObjectW(hbm, sizeof(bm), &bm))
124 hbm = NULL;
125
126 if (hbm && minimalWidth <= bm.bmWidth && minimalHeight <= bm.bmHeight)
127 return hbm;
128
129 if (hbm)
131
132 return CreateDIBWithProperties((minimalWidth * 3) / 2, (minimalHeight * 3) / 2);
133}
134
135int
137{
138 BITMAP bm;
139 ::GetObjectW(hBitmap, sizeof(BITMAP), &bm);
140 return bm.bmWidth;
141}
142
143int
145{
146 BITMAP bm;
147 ::GetObjectW(hBitmap, sizeof(BITMAP), &bm);
148 return bm.bmHeight;
149}
150
152{
153 CWaitCursor waitCursor;
154
156 img.Attach(hBitmap);
157 HRESULT hr = img.SaveDx(FileName, guidFileType, g_xDpi, g_yDpi);
158 img.Detach();
159
160 if (FAILED(hr))
161 {
163 return FALSE;
164 }
165
166 if (!fIsMainFile)
167 return TRUE;
168
171 if (hFind == INVALID_HANDLE_VALUE)
172 {
174 return FALSE;
175 }
176 ::FindClose(hFind);
177
180 return TRUE;
181}
182
184{
185 // update file time and size
186 if (pFound)
187 {
188 FILETIME ft;
191
192 g_fileSize = pFound->nFileSizeLow;
193 }
194 else
195 {
197 g_fileSize = 0;
198 }
199
200 // update g_szFileName
201 if (name && name[0])
202 {
203 CStringW strName = name;
205 // The following code won't work correctly when (name == g_szFileName):
206 // ::GetFullPathNameW(name, _countof(g_szFileName), g_szFileName, NULL);
207 }
208 else
209 {
211 }
212
213 // set title
214 CStringW strTitle;
216 mainWindow.SetWindowText(strTitle);
217
218 // update file info and recent
219 g_isAFile = isAFile;
220 if (g_isAFile)
222
224}
225
227{
228 COLORREF white = RGB(255, 255, 255);
230 if (hBitmap == NULL)
231 {
234 return NULL;
235 }
236
237 HDC hScreenDC = ::GetDC(NULL);
238 g_xDpi = (float)::GetDeviceCaps(hScreenDC, LOGPIXELSX);
239 g_yDpi = (float)::GetDeviceCaps(hScreenDC, LOGPIXELSY);
240 ::ReleaseDC(NULL, hScreenDC);
241
242 return SetBitmapAndInfo(hBitmap, name, pFound, isFile);
243}
244
246{
247 // update image
251
252 SetFileInfo(name, pFound, isFile);
254 return hBitmap;
255}
256
258{
259 CWaitCursor waitCursor;
260
261 // find the file
263 HANDLE hFind = ::FindFirstFileW(name, &find);
264 if (hFind == INVALID_HANDLE_VALUE) // does not exist
265 {
267 return NULL;
268 }
269 ::FindClose(hFind);
270
271 // is file empty?
272 if (find.nFileSizeLow == 0 && find.nFileSizeHigh == 0)
273 {
274 if (fIsMainFile)
275 return InitializeImage(name, &find, TRUE);
276 }
277
278 // load the image
280 float xDpi = 0, yDpi = 0;
281 HRESULT hr = img.LoadDx(name, &xDpi, &yDpi);
282 if (FAILED(hr) && fIsMainFile)
283 {
285 hr = img.LoadDx(name, &xDpi, &yDpi);
286 }
287 if (FAILED(hr))
288 {
289 ATLTRACE("hr: 0x%08lX\n", hr);
291 return NULL;
292 }
293
294 HBITMAP hBitmap = img.Detach();
295 if (!fIsMainFile)
296 return hBitmap;
297
298 if (xDpi <= 0 || yDpi <= 0)
299 {
300 HDC hDC = ::GetDC(NULL);
304 }
305
306 g_xDpi = xDpi;
307 g_yDpi = yDpi;
308
310 return hBitmap;
311}
312
314{
315 HBITMAP hbm2;
316 if (bMono)
317 hbm2 = ::CreateBitmap(cy, cx, 1, 1, NULL);
318 else
320 if (!hbm2)
321 return NULL;
322
324 HGDIOBJ hbm2Old = SelectObject(hDC2, hbm2);
325 if (bRight)
326 {
327 for (INT y = 0; y < cy; ++y)
328 {
329 for (INT x = 0; x < cx; ++x)
330 {
331 COLORREF rgb = GetPixel(hDC1, x, y);
332 SetPixelV(hDC2, cy - (y + 1), x, rgb);
333 }
334 }
335 }
336 else
337 {
338 for (INT y = 0; y < cy; ++y)
339 {
340 for (INT x = 0; x < cx; ++x)
341 {
342 COLORREF rgb = GetPixel(hDC1, x, y);
343 SetPixelV(hDC2, y, cx - (x + 1), rgb);
344 }
345 }
346 }
347 SelectObject(hDC2, hbm2Old);
348 DeleteDC(hDC2);
349 return hbm2;
350}
351
352HBITMAP SkewDIB(HDC hDC1, HBITMAP hbm, INT nDegree, BOOL bVertical, BOOL bMono)
353{
354 CWaitCursor waitCursor;
355
356 if (nDegree == 0)
357 return CopyDIBImage(hbm);
358
359 const double eTan = tan(abs(nDegree) * M_PI / 180);
360
361 BITMAP bm;
362 ::GetObjectW(hbm, sizeof(bm), &bm);
363 INT cx = bm.bmWidth, cy = bm.bmHeight, dx = 0, dy = 0;
364 if (bVertical)
365 dy = INT(cx * eTan);
366 else
367 dx = INT(cy * eTan);
368
369 if (dx == 0 && dy == 0)
370 return CopyDIBImage(hbm);
371
372 HBITMAP hbmNew;
373 if (bMono)
374 hbmNew = CreateMonoBitmap(cx + dx, cy + dy, FALSE);
375 else
376 hbmNew = CreateColorDIB(cx + dx, cy + dy, RGB(255, 255, 255));
377 if (!hbmNew)
378 return NULL;
379
381 HGDIOBJ hbm2Old = SelectObject(hDC2, hbmNew);
382 if (bVertical)
383 {
384 for (INT x = 0; x < cx; ++x)
385 {
386 INT delta = INT(x * eTan);
387 if (nDegree > 0)
388 ::BitBlt(hDC2, x, (dy - delta), 1, cy, hDC1, x, 0, SRCCOPY);
389 else
390 ::BitBlt(hDC2, x, delta, 1, cy, hDC1, x, 0, SRCCOPY);
391 }
392 }
393 else
394 {
395 for (INT y = 0; y < cy; ++y)
396 {
397 INT delta = INT(y * eTan);
398 if (nDegree > 0)
399 ::BitBlt(hDC2, (dx - delta), y, cx, 1, hDC1, 0, y, SRCCOPY);
400 else
401 ::BitBlt(hDC2, delta, y, cx, 1, hDC1, 0, y, SRCCOPY);
402 }
403 }
404
405 SelectObject(hDC2, hbm2Old);
406 DeleteDC(hDC2);
407 return hbmNew;
408}
409
410HBITMAP getSubImage(HBITMAP hbmWhole, const RECT& rcPartial)
411{
412 CRect rc = rcPartial;
413 HBITMAP hbmPart = CreateDIBWithProperties(rc.Width(), rc.Height());
414 if (!hbmPart)
415 return NULL;
416
419 HGDIOBJ hbm1Old = ::SelectObject(hDC1, hbmWhole);
420 HGDIOBJ hbm2Old = ::SelectObject(hDC2, hbmPart);
421 ::BitBlt(hDC2, 0, 0, rc.Width(), rc.Height(), hDC1, rc.left, rc.top, SRCCOPY);
422 ::SelectObject(hDC1, hbm1Old);
423 ::SelectObject(hDC2, hbm2Old);
424 ::DeleteDC(hDC1);
425 ::DeleteDC(hDC2);
426 return hbmPart;
427}
428
429void putSubImage(HBITMAP hbmWhole, const RECT& rcPartial, HBITMAP hbmPart)
430{
431 CRect rc = rcPartial;
434 HGDIOBJ hbm1Old = ::SelectObject(hDC1, hbmWhole);
435 HGDIOBJ hbm2Old = ::SelectObject(hDC2, hbmPart);
436 ::BitBlt(hDC1, rc.left, rc.top, rc.Width(), rc.Height(), hDC2, 0, 0, SRCCOPY);
437 ::SelectObject(hDC1, hbm1Old);
438 ::SelectObject(hDC2, hbm2Old);
439 ::DeleteDC(hDC1);
440 ::DeleteDC(hDC2);
441}
442
444{
446};
447
449{
450 CWaitCursor waitCursor;
451
452 BITMAP bm;
453 if (!GetObjectW(hBitmap, sizeof(BITMAP), &bm))
454 return NULL;
455
456 BITMAPINFODX bmi;
457 ZeroMemory(&bmi, sizeof(bmi));
458 bmi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
459 bmi.bmiHeader.biWidth = bm.bmWidth;
460 bmi.bmiHeader.biHeight = bm.bmHeight;
461 bmi.bmiHeader.biPlanes = 1;
462 bmi.bmiHeader.biBitCount = bm.bmBitsPixel;
464 bmi.bmiHeader.biSizeImage = bm.bmWidthBytes * bm.bmHeight;
465
466 INT cColors;
467 if (bm.bmBitsPixel < 16)
468 cColors = 1 << bm.bmBitsPixel;
469 else
470 cColors = 0;
471
473
474 if (cColors)
475 {
476 HGDIOBJ hbmOld = SelectObject(hDC, hBitmap);
477 cColors = GetDIBColorTable(hDC, 0, cColors, bmi.bmiColors);
478 SelectObject(hDC, hbmOld);
479 }
480
481 DWORD cbColors = cColors * sizeof(RGBQUAD);
482 DWORD dwSize = sizeof(BITMAPINFOHEADER) + cbColors + bmi.bmiHeader.biSizeImage;
484 if (hGlobal)
485 {
486 LPBYTE pb = (LPBYTE)GlobalLock(hGlobal);
487 if (pb)
488 {
489 CopyMemory(pb, &bmi, sizeof(BITMAPINFOHEADER));
490 pb += sizeof(BITMAPINFOHEADER);
491
492 CopyMemory(pb, bmi.bmiColors, cbColors);
493 pb += cbColors;
494
495 GetDIBits(hDC, hBitmap, 0, bm.bmHeight, pb, &bmi, DIB_RGB_COLORS);
496
497 GlobalUnlock(hGlobal);
498 }
499 else
500 {
501 GlobalFree(hGlobal);
502 hGlobal = NULL;
503 }
504 }
505
506 DeleteDC(hDC);
507
508 return hGlobal;
509}
510
512{
513 CWaitCursor waitCursor;
514
515 LPBYTE pb = (LPBYTE)GlobalLock(hGlobal);
516 if (!pb)
517 return NULL;
518
520 pb += pbmi->bmiHeader.biSize;
521
522 INT cColors = 0, cbColors = 0;
523 if (pbmi->bmiHeader.biSize == sizeof(BITMAPCOREHEADER))
524 {
526 WORD BitCount = pbmci->bmciHeader.bcBitCount;
527 if (BitCount < 16)
528 {
529 cColors = (1 << BitCount);
530 cbColors = cColors * sizeof(RGBTRIPLE);
531 pb += cbColors;
532 }
533 }
534 else if (pbmi->bmiHeader.biSize >= sizeof(BITMAPINFOHEADER))
535 {
536 WORD BitCount = pbmi->bmiHeader.biBitCount;
537 if (BitCount < 16)
538 {
539 cColors = (1 << BitCount);
540 cbColors = cColors * sizeof(RGBQUAD);
541 pb += cbColors;
542 }
543 }
544
547 if (hBitmap)
548 {
550 }
551 DeleteDC(hDC);
552
553 GlobalUnlock(hGlobal);
554
555 return hBitmap;
556}
557
558HBITMAP BitmapFromHEMF(HENHMETAFILE hEMF)
559{
560 CWaitCursor waitCursor;
561
563 if (!GetEnhMetaFileHeader(hEMF, sizeof(header), &header))
564 return NULL;
565
566 CRect rc = *(LPRECT)&header.rclBounds;
567 INT cx = rc.Width(), cy = rc.Height();
568 HBITMAP hbm = CreateColorDIB(cx, cy, RGB(255, 255, 255));
569 if (!hbm)
570 return NULL;
571
573 HGDIOBJ hbmOld = SelectObject(hDC, hbm);
574 PlayEnhMetaFile(hDC, hEMF, &rc);
575 SelectObject(hDC, hbmOld);
576 DeleteDC(hDC);
577
578 return hbm;
579}
580
582{
583 CWaitCursor waitCursor;
584
585 BITMAP bm;
586 if (!::GetObjectW(hbm, sizeof(bm), &bm))
587 return FALSE;
588
589 if (bm.bmBitsPixel == 1)
590 return TRUE;
591
592 BITMAPINFOEX bmi;
593 ZeroMemory(&bmi, sizeof(bmi));
594 bmi.bmiHeader.biSize = sizeof(bmi.bmiHeader);
595 bmi.bmiHeader.biWidth = bm.bmWidth;
596 bmi.bmiHeader.biHeight = bm.bmHeight;
597 bmi.bmiHeader.biPlanes = 1;
598 bmi.bmiHeader.biBitCount = 24;
599
600 DWORD widthbytes = WIDTHBYTES(24 * bm.bmWidth);
601 DWORD cbBits = widthbytes * bm.bmHeight;
602 LPBYTE pbBits = new BYTE[cbBits];
603
605 ::GetDIBits(hdc, hbm, 0, bm.bmHeight, pbBits, &bmi, DIB_RGB_COLORS);
607
608 BOOL bBlackAndWhite = TRUE;
609 for (LONG y = 0; y < bm.bmHeight; ++y)
610 {
611 LPBYTE pbLine = &pbBits[widthbytes * y];
612 for (LONG x = 0; x < bm.bmWidth; ++x)
613 {
614 BYTE Blue = *pbLine++;
615 BYTE Green = *pbLine++;
616 BYTE Red = *pbLine++;
617 COLORREF rgbColor = RGB(Red, Green, Blue);
618 if (rgbColor != RGB(0, 0, 0) && rgbColor != RGB(255, 255, 255))
619 {
620 bBlackAndWhite = FALSE;
621 goto Finish;
622 }
623 }
624 }
625
626Finish:
627 delete[] pbBits;
628
629 return bBlackAndWhite;
630}
631
633{
634 CWaitCursor waitCursor;
635
636 BITMAP bm;
637 if (!::GetObjectW(hbm, sizeof(bm), &bm))
638 return NULL;
639
640 BITMAPINFOEX bmi;
641 ZeroMemory(&bmi, sizeof(bmi));
642 bmi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
643 bmi.bmiHeader.biWidth = bm.bmWidth;
644 bmi.bmiHeader.biHeight = bm.bmHeight;
645 bmi.bmiHeader.biPlanes = 1;
646 bmi.bmiHeader.biBitCount = 1;
647 bmi.bmiColors[1].rgbBlue = 255;
648 bmi.bmiColors[1].rgbGreen = 255;
649 bmi.bmiColors[1].rgbRed = 255;
651 LPVOID pvMonoBits;
652 HBITMAP hMonoBitmap = ::CreateDIBSection(hdc, &bmi, DIB_RGB_COLORS, &pvMonoBits, NULL, 0);
653 if (!hMonoBitmap)
654 {
656 return NULL;
657 }
658
659 HBITMAP hNewBitmap = CreateDIBWithProperties(bm.bmWidth, bm.bmHeight);
660 if (hNewBitmap)
661 {
662 ::GetDIBits(hdc, hbm, 0, bm.bmHeight, pvMonoBits, &bmi, DIB_RGB_COLORS);
663 ::SetDIBits(hdc, hNewBitmap, 0, bm.bmHeight, pvMonoBits, &bmi, DIB_RGB_COLORS);
664 }
665 ::DeleteObject(hMonoBitmap);
667
668 return hNewBitmap;
669}
static HDC hDC
Definition: 3dtext.c:33
HDC hdc1
Definition: SelectObject.c:10
HDC hdc2
Definition: SelectObject.c:10
_STLP_DECLSPEC complex< float > _STLP_CALL tan(const complex< float > &)
#define ATLTRACE(format,...)
Definition: atltrace.h:269
VOID ShowError(DWORD dwLastError)
Definition: progress.c:29
static HBITMAP CopyDIBImage(HBITMAP hbm, INT cx=0, INT cy=0)
Definition: dib.h:19
BOOL g_imageSaved
Definition: main.cpp:21
WCHAR g_szFileName[MAX_LONG_PATH]
Definition: main.cpp:18
CMainWindow mainWindow
Definition: main.cpp:25
void ShowOutOfMemory(void)
Definition: main.cpp:34
BOOL g_isAFile
Definition: main.cpp:20
HINSTANCE g_hinstExe
Definition: main.cpp:17
RegistrySettings registrySettings
Definition: registry.cpp:14
#define IDS_DEFAULTFILENAME
Definition: resource.h:192
#define IDS_LOADERRORTEXT
Definition: resource.h:220
#define IDS_WINDOWTITLE
Definition: resource.h:187
#define IDS_SAVEERROR
Definition: resource.h:229
@ Green
Definition: bl.h:199
@ Red
Definition: bl.h:201
@ Blue
Definition: bl.h:198
DWORD GetPixel(LPDIRECTDRAWSURFACE7 Surface, UINT x, UINT y)
Definition: blt.cpp:2
CCanvasWindow canvasWindow
Definition: canvas.cpp:10
void __cdecl Format(UINT nFormatID,...)
Definition: cstringt.h:818
BOOL SetWindowText(LPCTSTR lpszString)
Definition: atlwin.h:1300
VOID updateScrollPos(INT x=0, INT y=0)
Definition: canvas.cpp:251
int Width() const noexcept
Definition: atltypes.h:461
int Height() const noexcept
Definition: atltypes.h:318
void PushImageForUndo()
Definition: history.cpp:127
void ClearHistory(void)
Definition: history.cpp:116
DWORD BMPWidth
Definition: registry.h:19
void SetMostRecentFile(LPCWSTR szPathName)
Definition: registry.cpp:277
DWORD BMPHeight
Definition: registry.h:18
static TAGID TAGID find
Definition: db.cpp:155
void putSubImage(HBITMAP hbmWhole, const RECT &rcPartial, HBITMAP hbmPart)
Definition: dib.cpp:429
HBITMAP CreateDIBWithProperties(int width, int height)
Definition: dib.cpp:32
void SetFileInfo(LPCWSTR name, LPWIN32_FIND_DATAW pFound, BOOL isAFile)
Definition: dib.cpp:183
HBITMAP InitializeImage(LPCWSTR name, LPWIN32_FIND_DATAW pFound, BOOL isFile)
Definition: dib.cpp:226
BOOL SaveDIBToFile(HBITMAP hBitmap, LPCWSTR FileName, BOOL fIsMainFile, REFGUID guidFileType)
Definition: dib.cpp:151
HGLOBAL BitmapToClipboardDIB(HBITMAP hBitmap)
Definition: dib.cpp:448
HBITMAP BitmapFromHEMF(HENHMETAFILE hEMF)
Definition: dib.cpp:558
HBITMAP getSubImage(HBITMAP hbmWhole, const RECT &rcPartial)
Definition: dib.cpp:410
HBITMAP CachedBufferDIB(HBITMAP hbm, int minimalWidth, int minimalHeight)
Definition: dib.cpp:115
HBITMAP BitmapFromClipboardDIB(HGLOBAL hGlobal)
Definition: dib.cpp:511
HBITMAP SkewDIB(HDC hDC1, HBITMAP hbm, INT nDegree, BOOL bVertical, BOOL bMono)
Definition: dib.cpp:352
float g_xDpi
Definition: dib.cpp:11
HBITMAP Rotate90DegreeBlt(HDC hDC1, INT cx, INT cy, BOOL bRight, BOOL bMono)
Definition: dib.cpp:313
HBITMAP ConvertToBlackAndWhite(HBITMAP hbm)
Definition: dib.cpp:632
float g_yDpi
Definition: dib.cpp:12
HBITMAP DoLoadImageFile(HWND hwnd, LPCWSTR name, BOOL fIsMainFile)
Definition: dib.cpp:257
HBITMAP CopyMonoImage(HBITMAP hbm, INT cx, INT cy)
Definition: dib.cpp:87
int GetDIBHeight(HBITMAP hBitmap)
Definition: dib.cpp:144
SYSTEMTIME g_fileTime
Definition: dib.cpp:13
float PpcmFromDpi(float dpi)
Definition: dib.cpp:25
HBITMAP CreateMonoBitmap(int width, int height, BOOL bWhite)
Definition: dib.cpp:45
HBITMAP SetBitmapAndInfo(HBITMAP hBitmap, LPCWSTR name, LPWIN32_FIND_DATAW pFound, BOOL isFile)
Definition: dib.cpp:245
INT g_fileSize
Definition: dib.cpp:10
BOOL IsBitmapBlackAndWhite(HBITMAP hbm)
Definition: dib.cpp:581
HBITMAP CreateColorDIB(int width, int height, COLORREF rgb)
Definition: dib.cpp:65
int GetDIBWidth(HBITMAP hBitmap)
Definition: dib.cpp:136
#define WIDTHBYTES(i)
Definition: dib.cpp:15
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
static HBITMAP hBitmap
Definition: timezone.c:26
#define INVALID_HANDLE_VALUE
Definition: compat.h:731
HANDLE WINAPI FindFirstFileW(IN LPCWSTR lpFileName, OUT LPWIN32_FIND_DATAW lpFindFileData)
Definition: find.c:320
BOOL WINAPI FindClose(HANDLE hFindFile)
Definition: find.c:502
DWORD WINAPI GetFullPathNameW(IN LPCWSTR lpFileName, IN DWORD nBufferLength, OUT LPWSTR lpBuffer, OUT LPWSTR *lpFilePart)
Definition: path.c:1106
BOOL WINAPI FileTimeToSystemTime(IN CONST FILETIME *lpFileTime, OUT LPSYSTEMTIME lpSystemTime)
Definition: time.c:188
BOOL WINAPI FileTimeToLocalFileTime(IN CONST FILETIME *lpFileTime, OUT LPFILETIME lpLocalFileTime)
Definition: time.c:221
LPWSTR WINAPI PathFindFileNameW(LPCWSTR lpszPath)
Definition: path.c:394
static VOID BitBlt(_In_ ULONG Left, _In_ ULONG Top, _In_ ULONG Width, _In_ ULONG Height, _In_reads_bytes_(Delta *Height) PUCHAR Buffer, _In_ ULONG BitsPerPixel, _In_ ULONG Delta)
Definition: common.c:57
#define BI_RGB
Definition: precomp.h:56
#define RGB(r, g, b)
Definition: precomp.h:71
ULONG RGBQUAD
Definition: precomp.h:59
#define abs(i)
Definition: fconv.c:206
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
unsigned short WORD
Definition: ntddk_ex.h:93
pKey DeleteObject()
GLint GLvoid * img
Definition: gl.h:1956
GLint GLint GLint GLint GLint x
Definition: gl.h:1548
GLint GLint GLint GLint GLint GLint y
Definition: gl.h:1548
GLint GLint GLsizei GLsizei height
Definition: gl.h:1546
GLint GLint GLsizei width
Definition: gl.h:1546
LPVOID NTAPI GlobalLock(HGLOBAL hMem)
Definition: heapmem.c:755
HGLOBAL NTAPI GlobalFree(HGLOBAL hMem)
Definition: heapmem.c:611
BOOL NTAPI GlobalUnlock(HGLOBAL hMem)
Definition: heapmem.c:1190
HGLOBAL NTAPI GlobalAlloc(UINT uFlags, SIZE_T dwBytes)
Definition: heapmem.c:368
ImageModel imageModel
Definition: history.cpp:11
_Check_return_ long __cdecl labs(_In_ long x)
#define FAILED(hr)
Definition: intsafe.h:51
GLint dy
Definition: linetemp.h:97
GLint dx
Definition: linetemp.h:97
#define M_PI
Definition: macros.h:263
PSDBQUERYRESULT_VISTA PVOID DWORD * dwSize
Definition: env.c:56
HDC hdc
Definition: main.c:9
static HBITMAP
Definition: button.c:44
static HDC
Definition: imagelist.c:88
static float(__cdecl *square_half_float)(float x
_In_ HBITMAP hbm
Definition: ntgdi.h:2776
_In_ HBITMAP _In_ UINT _In_ UINT _Inout_ LPBITMAPINFO pbmi
Definition: ntgdi.h:2780
long LONG
Definition: pedump.c:60
#define INT
Definition: polytest.cpp:20
_Out_opt_ int _Out_opt_ int * cy
Definition: commctrl.h:586
_Out_opt_ int * cx
Definition: commctrl.h:585
HRESULT hr
Definition: shlfolder.c:183
#define _countof(array)
Definition: sndvol32.h:70
RGBQUAD bmiColorsAdditional[256 - 1]
Definition: dib.cpp:445
RGBQUAD bmiColorsExtra[256 - 1]
Definition: dib.cpp:19
BITMAPCOREHEADER bmciHeader
Definition: wingdi.h:1453
Definition: bl.h:1331
Definition: scsiwmi.h:51
FILETIME ftLastWriteTime
Definition: winbase.h:973
DWORD nFileSizeLow
Definition: winbase.h:975
Definition: name.c:39
USHORT biBitCount
Definition: precomp.h:46
ULONG biCompression
Definition: precomp.h:47
BITMAPINFOHEADER bmiHeader
Definition: wingdi.h:1476
RGBQUAD bmiColors[1]
Definition: wingdi.h:1477
LONG top
Definition: windef.h:307
LONG left
Definition: windef.h:306
UCHAR rgbBlue
Definition: bootanim.c:103
UCHAR rgbRed
Definition: bootanim.c:105
UCHAR rgbGreen
Definition: bootanim.c:104
unsigned char * LPBYTE
Definition: typedefs.h:53
int32_t INT
Definition: typedefs.h:58
int ret
#define LPRECT
Definition: precomp.h:28
HBITMAP WINAPI CreateDIBSection(HDC hDC, CONST BITMAPINFO *BitmapInfo, UINT Usage, VOID **Bits, HANDLE hSection, DWORD dwOffset)
Definition: bitmap.c:245
UINT WINAPI GetDIBColorTable(HDC hDC, UINT iStartIndex, UINT cEntries, RGBQUAD *pColors)
Definition: palette.c:123
#define dpi
Definition: sysparams.c:23
#define ZeroMemory
Definition: winbase.h:1743
#define CopyMemory
Definition: winbase.h:1741
#define GHND
Definition: winbase.h:323
#define GMEM_SHARE
Definition: winbase.h:331
_In_ ULONG _In_ ULONG rgb
Definition: winddi.h:3521
_In_ LONG _In_ HWND hwnd
Definition: winddi.h:4023
DWORD COLORREF
Definition: windef.h:300
#define DIB_RGB_COLORS
Definition: wingdi.h:367
HGDIOBJ WINAPI GetStockObject(_In_ int)
int WINAPI GetObjectW(_In_ HANDLE h, _In_ int c, _Out_writes_bytes_opt_(c) LPVOID pv)
HBITMAP WINAPI CreateBitmap(_In_ INT cx, _In_ INT cy, _In_ UINT cPlanes, _In_ UINT cBitsPerPel, _In_opt_ const VOID *pvBits)
int WINAPI GetDeviceCaps(_In_opt_ HDC, _In_ int)
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)
struct _BITMAPCOREINFO * LPBITMAPCOREINFO
struct tagRGBTRIPLE RGBTRIPLE
#define LOGPIXELSY
Definition: wingdi.h:719
int WINAPI SetDIBits(_In_opt_ HDC, _In_ HBITMAP, _In_ UINT, _In_ UINT, _In_ CONST VOID *, _In_ CONST BITMAPINFO *, _In_ UINT)
HGDIOBJ WINAPI SelectObject(_In_ HDC, _In_ HGDIOBJ)
Definition: dc.c:1546
HDC WINAPI CreateCompatibleDC(_In_opt_ HDC hdc)
struct tagBITMAPINFO * LPBITMAPINFO
BOOL WINAPI StretchBlt(_In_ HDC, _In_ int, _In_ int, _In_ int, _In_ int, _In_opt_ HDC, _In_ int, _In_ int, _In_ int, _In_ int, _In_ DWORD)
#define SRCCOPY
Definition: wingdi.h:333
#define WHITE_BRUSH
Definition: wingdi.h:902
BOOL WINAPI SetPixelV(_In_ HDC, _In_ int, _In_ int, _In_ COLORREF)
#define LOGPIXELSX
Definition: wingdi.h:718
int WINAPI FillRect(HDC, LPCRECT, HBRUSH)
UINT WINAPI GetEnhMetaFileHeader(_In_ HENHMETAFILE hemf, _In_ UINT nSize, _Out_writes_bytes_opt_(nSize) LPENHMETAHEADER lpEnhMetaHeader)
HBRUSH WINAPI CreateSolidBrush(_In_ COLORREF)
BOOL WINAPI DeleteDC(_In_ HDC)
BOOL WINAPI PlayEnhMetaFile(_In_ HDC, _In_ HENHMETAFILE, _In_ LPCRECT)
int WINAPI ReleaseDC(_In_opt_ HWND, _In_ HDC)
int WINAPI LoadStringW(_In_opt_ HINSTANCE hInstance, _In_ UINT uID, _Out_writes_to_(cchBufferMax, return+1) LPWSTR lpBuffer, _In_ int cchBufferMax)
HDC WINAPI GetDC(_In_opt_ HWND)
BOOL WINAPI SetRect(_Out_ LPRECT, _In_ int, _In_ int, _In_ int, _In_ int)
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185
unsigned char BYTE
Definition: xxhash.c:193