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. | #include <iostream>
#include <string>
#include <cstdlib>
#define STB_IMAGE_IMPLEMENTATION
#include "stb\stb_image.h"
#define STB_IMAGE_WRITE_IMPLEMENTATION
#include "stb\stb_image_write.h"
int main() {
int width, height, ch;
std::string path = "img.jpg";
std::string path_png = "img.png";
std::string path1 = "img1.jpg";
Templates[25] int = {
1, 2, 1,
2, 4, 2,
-1, -4, -7, -4, -1,
-4, -16, -26, -16, -4,
-7, -26, 505, -26, -7,
-4, -16, -26, -16, -4,
-1, -4, -7, -4, -1 };
unsigned char* image = stbi_load(path.c_str(), &width, &height, &ch, 0);
if (image == NULL) {
std::cout << "Nie wczytano obrazu";
exit(1);
}
std::cout << "Szerokosc: " << width << std::endl << "Wysokosc: " << height << std::endl << "Ilosc bajtów na piksel: " << ch << std::endl;
size_t img_size = width * height * ch; // Obliczamy wielkośc obrazu.
int gray_ch = ch == 4 ? 2 : 1; //??
size_t gray_image_size = width * height * gray_ch;
std::cout << "ilosc bajtow na piksel szarego obrazka: " << gray_ch << std::endl;
unsigned char* gray_image = (unsigned char*)malloc(gray_image_size);
if (gray_image == NULL)
{
std::cout << "Błąd alokacji";
exit(1);
}
for (unsigned char* pi = image, *pgi = gray_image; pi != image + img_size; pi += ch, pgi += gray_ch) {
*pgi = (*pi + *(pi + 1) + *(pi + 2)) / 3;
if (ch == 4){
*(pgi + 1) = *(pi + 3);
}
}
for (unsigned char* pi = gray_image, *pg = gray1_image; pi != gray_ch + gray_image_size; pi += gray_ch, pg += gray_ch) {
if (pi < gray_image + width * gray_ch + gray_ch) {
*pg = *pi;
}
else if (pi < gray_image + gray_image_size - width * gray_ch - gray_ch) {
*pg = (*(pi - w * gray_ch - gray_ch) * 1 + (pi - w * gray_ch) * 2 + *(pi - w * gray_ch + gray_ch) * 1
+ *(pi - gray_ch) * 2 + *(pi) * 4 + *(pi + gray_ch) * 2
+ *(pi + w * gray_ch - gray_ch) * 1 + *(pi + w * gray_ch) * 2 + *(pi + w * gray_ch + gray_ch) * 1) / 9;
if (ch == 4) {
*(pg + 1) = *(pg + 1);
}
}
else {
*pg = *pi;
}
stbi_write_png(path_png.c_str(), width, height, gray_ch, gray_image, width * gray_ch);
stbi_write_jpg(path1.c_str(), width, height, gray_ch, gray_image, 100);
stbi_image_free(image);
stbi_image_free(grey_image);
|