-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathimagem.cpp
121 lines (91 loc) · 3.44 KB
/
imagem.cpp
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
//--------------------------------------------------------------------------
// Estrutura para armazenamento da imagem e de algumas informacoes uteis
//--------------------------------------------------------------------------
struct Image {
ILubyte *rawData;
ILuint id;
ILint width;
ILint height;
ILuint depth;
ILuint format;
};
//--------------------------------------------------------------------------
// Carrega uma imagem para a memoria
//--------------------------------------------------------------------------
ILuint LoadImage(char *filename, Image *image)
{
ILuint newImageID;
ilGenImages(1, &newImageID);
ilBindImage(newImageID);
if (!ilLoadImage(filename))
return 0;
ilConvertImage(IL_RGBA, IL_UNSIGNED_BYTE);
image->id = newImageID;
image->rawData = ilGetData();
image->width = ilGetInteger(IL_IMAGE_WIDTH);
image->height = ilGetInteger(IL_IMAGE_HEIGHT);
image->depth = ilGetInteger(IL_IMAGE_DEPTH);
image->format = ilGetInteger(IL_IMAGE_FORMAT);
return 1;
}
//--------------------------------------------------------------------------
// Escala uma imagem em memoria
//--------------------------------------------------------------------------
ILuint ScaleImage(Image *image, ILuint width, ILuint height)
{
ilBindImage(image->id);
if (! iluScale(width, height, image->depth))
return 0;
image->rawData = ilGetData();
image->width = ilGetInteger(IL_IMAGE_WIDTH);
image->height = ilGetInteger(IL_IMAGE_HEIGHT);
image->depth = ilGetInteger(IL_IMAGE_DEPTH);
image->format = ilGetInteger(IL_IMAGE_FORMAT);
return 1;
}
//--------------------------------------------------------------------------
// Faz uma copia, em memoria, de uma imagem
//--------------------------------------------------------------------------
ILuint CopyImage(Image *src, Image *dest)
{
ILuint newImageID;
ilGenImages(1, &newImageID);
ilBindImage(newImageID);
if (!ilCopyImage(src->id))
return 0;
dest->id = newImageID;
dest->rawData = ilGetData();
dest->width = ilGetInteger(IL_IMAGE_WIDTH);
dest->height = ilGetInteger(IL_IMAGE_HEIGHT);
dest->depth = ilGetInteger(IL_IMAGE_DEPTH);
dest->format = ilGetInteger(IL_IMAGE_FORMAT);
return 1;
}
//--------------------------------------------------------------------------
// Salva uma imagem em memoria para um arquivo
//--------------------------------------------------------------------------
ILboolean SaveImage(Image *image, char * filename)
{
ilBindImage(image->id);
return ilSaveImage(filename) ;
}
//--------------------------------------------------------------------------
// Carrega uma imagem para a memoria e gera uma textura a partir dela (OpenGL)
//--------------------------------------------------------------------------
ILuint LoadImageTexture(char *filename)
{
return ilutGLLoadImage(filename);
}
//--------------------------------------------------------------------------
// Carrega uma imagem para a memoria e gera um mipmap a partir dela (OpenGL)
//--------------------------------------------------------------------------
ILuint LoadImageMipmaps(char *filename)
{
ILuint newImageID;
ilGenImages(1, &newImageID);
ilBindImage(newImageID);
if (!ilLoadImage(filename))
return 0;
ilConvertImage(IL_RGBA, IL_UNSIGNED_BYTE);
return ilutGLBindMipmaps();
}