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
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
|
#include "imageloader.h"
#include <math.h>
#include <string>
#include <dirent.h>
#include <iostream>
using namespace Magick;
cImageLoader::cImageLoader() {
InitializeMagick(NULL);
logoExtension = "png";
}
cImageLoader::~cImageLoader() {
}
bool cImageLoader::LoadLogo(const char *logo, int width = -1, int height = -1) {
if( width == -1 )
width = logoWidth;
if( height == -1 )
height = logoHeight;
if( (width == 0) || (height==0) )
return false;
std::string logoLower = logo;
toLowerCase(logoLower);
bool success = LoadImage(logoLower.c_str(), Config.logoPath, logoExtension);
if( !success )
return false;
if( height != 0 || width != 0 ) {
buffer.sample( Geometry(width, height) );
}
return true;
}
int cImageLoader::Height(void) {
Geometry geo = buffer.size();
return geo.height();
}
int cImageLoader::Width(void) {
Geometry geo = buffer.size();
return geo.width();
}
bool cImageLoader::LoadIcon(const char *cIcon, int size) {
if (size==0)
return false;
cString iconThemePath = cString::sprintf("%s%s/", *Config.iconPath, Setup.OSDTheme);
bool success = LoadImage(cString(cIcon), iconThemePath, "png");
if (!success)
return false;
if( size >= 0 )
buffer.sample(Geometry(size, size));
return true;
}
bool cImageLoader::LoadIcon(const char *cIcon, int width, int height, bool preserveAspect) {
try {
if ((width == 0)||(height==0))
return false;
cString iconThemePath = cString::sprintf("%s%s/", *Config.iconPath, Setup.OSDTheme);
bool success = LoadImage(cString(cIcon), iconThemePath, "png");
if (!success)
return false;
if (preserveAspect) {
buffer.sample(Geometry(width, height));
} else {
cString geometry = cString::sprintf("%dx%d!", width, height);
buffer.scale(Geometry(*geometry));
}
return true;
}
catch (...) {
return false;
}
}
cImage cImageLoader::GetImage() {
int w, h;
w = buffer.columns();
h = buffer.rows();
cImage image (cSize(w, h));
const PixelPacket *pixels = buffer.getConstPixels(0, 0, w, h);
for (int iy = 0; iy < h; ++iy) {
for (int ix = 0; ix < w; ++ix) {
tColor col = (~int(pixels->opacity * 255 / MaxRGB) << 24)
| (int(pixels->green * 255 / MaxRGB) << 8)
| (int(pixels->red * 255 / MaxRGB) << 16)
| (int(pixels->blue * 255 / MaxRGB) );
image.SetPixel(cPoint(ix, iy), col);
++pixels;
}
}
return image;
}
Color cImageLoader::Argb2Color(tColor col) {
tIndex alpha = (col & 0xFF000000) >> 24;
tIndex red = (col & 0x00FF0000) >> 16;
tIndex green = (col & 0x0000FF00) >> 8;
tIndex blue = (col & 0x000000FF);
Color color(MaxRGB*red/255, MaxRGB*green/255, MaxRGB*blue/255, MaxRGB*(0xFF-alpha)/255);
return color;
}
void cImageLoader::toLowerCase(std::string &str) {
const int length = str.length();
for(int i=0; i < length; ++i) {
str[i] = std::tolower(str[i]);
}
}
bool cImageLoader::LoadImage(cString FileName, cString Path, cString Extension) {
try {
cString File = cString::sprintf("%s%s.%s", *Path, *FileName, *Extension);
dsyslog("imageloader: trying to load: %s", *File);
//printf("imageloader: trying to load: %s\n", *File);
buffer.read(*File);
dsyslog("imageloader: %s sucessfully loaded", *File);
//printf("imageloader: %s sucessfully loaded\n", *File);
} catch (...) {
return false;
}
return true;
}
|