blob: c7edd9d3660ae7479f7adbf4688da717932e2b64 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
|
#if !defined(HISTORYSTATS_GUARD_CANVAS_H)
#define HISTORYSTATS_GUARD_CANVAS_H
#include "stdafx.h"
class Canvas
: private pattern::NotCopyable<Canvas>
{
public:
class Digest
{
public:
unsigned char m_Digest[20];
Digest() { memset(m_Digest, 0, 20); }
Digest(const Digest& other) { memcpy(m_Digest, other.m_Digest, 20); }
const Digest& operator =(const Digest& other) { memcpy(m_Digest, other.m_Digest, 20); return *this; }
bool operator ==(const Digest& other) const { return (memcmp(m_Digest, other.m_Digest, 20) == 0); }
bool operator <(const Digest& other) const { return (memcmp(m_Digest, other.m_Digest, 20) < 0); }
};
private:
int m_nChannels;
int m_nWidth;
int m_nHeight;
int m_nLineLength;
bool m_bTransColor;
COLORREF m_TransColor;
BITMAPINFOHEADER* m_pBMIH;
HDC m_hDC;
HBITMAP m_hBmp;
HGDIOBJ m_hOldBmp;
private:
void updateTrans(BYTE* pData);
public:
explicit Canvas(int nWidth, int nHeight);
~Canvas();
void setTrans(COLORREF transColor, bool bFill = false);
void fillBackground(COLORREF bkColor);
HDC beginDraw();
void endDraw();
bool getDigest(Digest& digest);
bool writePNG(const wchar_t* szFileName);
};
#endif // HISTORYSTATS_GUARD_CANVAS_H
|