Menu

[r16]: / trunk / Image2Code / CrossUnix.cpp  Maximize  Restore  History

Download this file

91 lines (77 with data), 1.9 kB

 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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
#include "Cross.h"
#include <stdarg.h>
void Portable_String_Class::Format(Portable_String fmt, ...)
{
va_list args;
va_start(args,fmt);
FormatV(fmt,args);
va_end(args);
}
void Portable_String_Class::FormatV(Portable_String fmt, va_list args)
{
const int maxtries = 20;
const unsigned int bufsz = 1024;
char buf[bufsz];
char* pbuf = buf;
int len = 0;
int attempts = 0;
bool success = true;
do {
int maxlen = bufsz * attempts + bufsz - 1;
len = vsnprintf(pbuf, maxlen, fmt, args);
attempts++;
success = (len>=0 && len<maxlen);
if (!success) {
if (pbuf != buf)
delete [] pbuf;
pbuf = new char[(attempts + 1) * bufsz];
}
}
while (!success && attempts < maxtries);
this->clear();
if (success) {
pbuf[len] = '\0';
this->append(pbuf);
}
if (pbuf!=buf)
delete [] pbuf;
}
Bitmap::Bitmap()
: fWand(NULL)
{
MagickWandGenesis();
fWand=NewMagickWand();
}
Bitmap::~Bitmap()
{
DestroyMagickWand(fWand);
MagickWandTerminus();
}
bool Bitmap::Load(const char* name)
{
MagickBooleanType status = MagickReadImage(fWand,name);
return status != MagickFalse;
}
UINT Bitmap::GetWidth()
{
return MagickGetImageWidth(fWand);
}
UINT Bitmap::GetHeight()
{
return MagickGetImageHeight(fWand);
}
void Bitmap::GetPixel(INT x, INT y, Color* c)
{
PixelWand* color = NewPixelWand();
MagickGetImagePixelColor(fWand, x, y, color);
*c = Color(
static_cast<UCHAR>(PixelGetRed(color)*255),
static_cast<UCHAR>(PixelGetGreen(color)*255),
static_cast<UCHAR>(PixelGetBlue(color)*255)
);
DestroyPixelWand(color);
}
unsigned int Bitmap::GetBPP()
{
return MagickGetImageDepth(fWand);
}