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
|
#include "Thumbnail.h"
Thumbnail::Thumbnail(const Thumbnail & thumb):
ID(thumb.ID),
Datestamp(thumb.Datestamp),
Data(thumb.Data),
Size(thumb.Size)
{
//Ensure the actual thumbnail data is copied
if(thumb.Data)
{
Data = new pixel[thumb.Size.X*thumb.Size.Y];
memcpy(Data, thumb.Data, (thumb.Size.X*thumb.Size.Y) * PIXELSIZE);
}
else
{
Data = NULL;
}
}
Thumbnail::Thumbnail(int _id, int _datestamp, pixel * _data, ui::Point _size):
ID(_id),
Datestamp(_datestamp),
Data(_data),
Size(_size)
{
if(_data)
{
Data = new pixel[_size.X*_size.Y];
memcpy(Data, _data, (_size.X*_size.Y) * PIXELSIZE);
}
else
{
Data = NULL;
}
}
void Thumbnail::Resize(int width, int height)
{
Resize(ui::Point(width, height));
}
void Thumbnail::Resize(ui::Point newSize)
{
float scaleFactorX = 1.0f, scaleFactorY = 1.0f;
if(Size.Y > newSize.Y)
{
scaleFactorY = float(newSize.Y)/((float)Size.Y);
}
if(Size.X > newSize.X)
{
scaleFactorX = float(newSize.X)/((float)Size.X);
}
if(newSize.X == -1)
scaleFactorX = scaleFactorY;
if(newSize.Y == -1)
scaleFactorY = scaleFactorX;
if(scaleFactorY < 1.0f || scaleFactorX < 1.0f)
{
float scaleFactor = scaleFactorY < scaleFactorX ? scaleFactorY : scaleFactorX;
pixel * thumbData = Data;
Data = Graphics::resample_img(thumbData, Size.X, Size.Y, Size.X * scaleFactor, Size.Y * scaleFactor);
Size.X *= scaleFactor;
Size.Y *= scaleFactor;
delete[] thumbData;
}
}
Thumbnail::~Thumbnail()
{
if(Data)
delete[] Data;
}
|