KolibriLib
Loading...
Searching...
No Matches
image.hpp
1#ifndef __IMAGE_H__
2#define __IMAGE_H__
3
4#include <sys/ksys.h>
5#include <string>
6#include <fstream>
7
8#include "UI.hpp"
9#include "base.hpp"
10#include "filesystem.hpp"
11
12namespace KolibriLib
13{
14 namespace UI
15 {
16
17
18
19 namespace Image
20 {
21 #define BitsType uint8_t
22 template <class ImageBits>
28 struct ARGB
29 {
30 ImageBits alpha;
31 ImageBits red;
32 ImageBits green;
33 ImageBits blue;
34 };
35
37 class img: public UIElement
38 {
39 private:
40 ARGB<uint8_t> *_d;
41
42 public:
43 img(const std::string& Path = ImgDir, const point<unsigned>& coord = {0, 0}, const point<unsigned>& size = {100, 100});
44 ~img();
45
49 bool LoadImage(const std::string& Path = ImgDir);
50
51
56 void Render(point<unsigned> coord = {0, 0}, point<unsigned> size = {0, 0});
57
61
62 ARGB<BitsType>* GetImagePtr();
63 };
64
65 img::img(const std::string& Path, const point<unsigned>& coord, const point<unsigned>& size) : UIElement( coord, size)
66 {
67 LoadImage(Path);
68 _d = (ARGB<BitsType> *)malloc(sizeof(ARGB<BitsType>));
69 }
70
71 img::~img()
72 {
73 free(_d);
74 }
75
76 bool img::LoadImage(const std::string& Path)
77 {
78 bool extcode;
79 if (filesystem::Exist(Path)) // Если файл с изображением существует
80 {
81 std::string Type;
82 std::ifstream img;
83
84 {
85 unsigned i = Path.length();
86
87 while (Path[i] != '.')
88 {
89 Type.push_back(Path[i]);
90 i--;
91 }
92 }
93
94 if (Type == "raw")
95 {
96 rgb_t buff;
97 while(!img.eof())
98 {
99 img.read((char*)&_d, sizeof(rgb_t));
100 }
101
102 }
103 else if (Type == "jpeg")
104 {
105 /* code */
106 }
107 else if(Type == "png")
108 {
109
110 }
111 else
112 {
113 extcode = false;
114 }
115
116 img.close();
117 }
118 else
119 {
120 return extcode = false;
121 }
122 return extcode;
123 }
124
126 {
127 if (size.x == 0 && size.y == 0)
128 {
129 size = _size;
130 }
131
132 rgb_t *buff = (rgb_t*)malloc( _size.x * _size.y * sizeof(rgb_t));
133
134 for (unsigned i = 0; i < _size.x * _size.y; i++)
135 {
136 buff[i].red = _d[i].red;
137 buff[i].green = _d[i].green;
138 buff[i].blue = _d[i].blue;
139 }
140
141 _ksys_draw_bitmap(buff, coord.x, coord.y, size.x, size.y);
142 }
143
145 {
146 return _size;
147 }
148
149 ARGB<BitsType>* img::GetImagePtr()
150 {
151 return _d;
152 }
153
154
155
156 } // namespace Image
157 } // namespace UI
158}
159
160#undef BitsType
161#endif // __IMAGE_H__
Класс для работы с изображениями
Definition image.hpp:38
bool LoadImage(const std::string &Path=ImgDir)
Загрузить изображение из файла
Definition image.hpp:76
void Render(point< unsigned > coord={0, 0}, point< unsigned > size={0, 0})
Вывести изображение
Definition image.hpp:125
point< unsigned > GetSize()
Получить размеры изображения
Definition image.hpp:144
Элемент интерфейса
Definition UI.hpp:26
point< unsigned > _size
Размер
Definition UI.hpp:33
bool Exist(const std::string &Path)
проверяет существует ли файл или папки
Definition filesystem.hpp:112
Основное пространство имён
Definition image.hpp:12
Битность цвета. Варианты <ImageBits>:
Definition image.hpp:29
Просто точка
Definition small.hpp:28