SHOW:
|
|
- or go back to the newest paste.
1 | #include <fstream> | |
2 | #include <ssb.h> | |
3 | ||
4 | bool save_tga(const char* filename, unsigned width, unsigned height, bool has_alpha, const unsigned char* data){ | |
5 | // Create TGA header | |
6 | #pragma GCC diagnostic push | |
7 | #pragma GCC diagnostic ignored "-Wnarrowing" | |
8 | unsigned char tga_header[18] = { | |
9 | 0, // ID length = no ID | |
10 | 0, // Color map type = no color map (=true colors) | |
11 | 2, // Image type = uncompressed true-color | |
12 | 0, 0, // Color map offset = 0 bytes | |
13 | 0, 0, // Color map length = 0 bytes | |
14 | 0, // Color map BPP = 0 bits | |
15 | 0, 0, 0, 0, // Image origin = 0/0 | |
16 | width & 0xff, (width >> 8) & 0xff, // Image width = width parameter | |
17 | height & 0xff, (height >> 8) & 0xff, // Image height = height parameter | |
18 | has_alpha ? 32 : 24, // Pixel depth = has_alpha parameter | |
19 | has_alpha ? 8 : 0 // Image descriptor = bottom-up + has alpha with 8 bits (has_alpha parameter)? | |
20 | }; | |
21 | #pragma GCC diagnostic pop | |
22 | // Open output file | |
23 | std::ofstream file(filename, std::ios::binary); | |
24 | if(!file) | |
25 | // Couldn't create image | |
26 | return false; | |
27 | // Write header in output file | |
28 | file.write(reinterpret_cast<const char*>(tga_header), sizeof(tga_header)); | |
29 | // Write data in output file | |
30 | file.write(reinterpret_cast<const char*>(data), has_alpha ? (width * height) << 2 : width * height * 3); | |
31 | // Image creation successed | |
32 | return true; | |
33 | } | |
34 | ||
35 | int main(){ | |
36 | // Create BGRA image | |
37 | const int width = 704, height = 396; | |
38 | unsigned char data[(width * height) << 2] = {0}; | |
39 | // Fill BGRA data | |
40 | for(unsigned long i = 0; i < sizeof(data); i+=4){ | |
41 | // Half transparent green | |
42 | data[i] = 0; | |
43 | data[i+1] = 255; | |
44 | data[i+2] = 0; | |
45 | - | data[i+3] = 255; |
45 | + | data[i+3] = 127; |
46 | } | |
47 | // Render on image with SSB | |
48 | char warning[SSB_WARNING_LENGTH]; | |
49 | ssb_renderer renderer = ssb_create_renderer(width, height, SSB_BGRA, "test.ssb", warning); | |
50 | if(renderer){ | |
51 | ssb_render(renderer, data, width << 2, 2000); | |
52 | ssb_free_renderer(renderer); | |
53 | }else{ | |
54 | puts(warning); | |
55 | return 1; | |
56 | } | |
57 | // Save image as TGA file | |
58 | if(!save_tga("ssb_test.tga", width, height, true, data)){ | |
59 | puts("Couldn't create image!"); | |
60 | return 1; | |
61 | } | |
62 | return 0; | |
63 | - | } |
63 | + | |
64 | ||
65 | /* | |
66 | g++ -c main.cpp -o main.o | |
67 | g++ -o SSB_Test main.o -lSSBRenderer | |
68 | */ |