Subversion Repositories Kolibri OS

Rev

Rev 9553 | Rev 9620 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
8818 turbocat 1
/* Written by turbocat2001 (Logaev Maxim) */
2
 
3
#include 
4
#include 
5
#include 
6
#include 
7
#include 
8
 
9
#define NEW_IMG_H 128
10
#define NEW_IMG_W 128
11
 
12
#define IMG_H 256
13
#define IMG_W 256
14
 
15
Image *image_blend; // Create image struct
16
 
17
ksys_colors_table_t sys_color_table;  // Create system colors table
18
 
19
void* load_img(char* fname, uint32_t* read_sz){  // Image file upload function
20
    FILE *f = fopen(fname, "rb");
21
    if (!f) {
22
        printf("Can't open file: %s\n", fname);
23
        return NULL;
24
    }
25
    if (fseek(f, 0, SEEK_END)) {
26
        printf("Can't SEEK_END file: %s\n", fname);
27
        return NULL;
28
    }
29
    int filesize = ftell(f);
30
    rewind(f);
31
    void* fdata = malloc(filesize);
32
    if(!fdata) {
33
        printf("No memory for file %s\n", fname);
34
        return NULL;
35
    }
36
    *read_sz = fread(fdata, 1, filesize, f);
37
    if (ferror(f)) {
38
        printf("Error reading file %s\n", fname);
39
        return NULL;
40
    }
41
    fclose(f);
42
    return fdata;
43
}
44
 
45
void draw_gui(){
46
    _ksys_start_draw();
9558 turbocat 47
	_ksys_create_window(10, 40, (IMG_W+NEW_IMG_W)+50, IMG_H+50, "Libimg", sys_color_table.work_area, 0x34);
48
	img_draw(image_blend, 10, 10, IMG_W*2, IMG_H , 0, 0);  // Draw blended image to window
8818 turbocat 49
    _ksys_end_draw();
50
}
51
 
52
int main(){
9558 turbocat 53
    if (kolibri_libimg_init() == -1){
54
		printf("Error loading lib_img.obj\n");
55
        exit(0);
56
	}
57
 
58
	_ksys_get_system_colors(&sys_color_table); // Get system colors theme
8818 turbocat 59
    _ksys_set_event_mask(0xC0000027);
60
 
61
    uint32_t img_size;
62
    void *file_data = load_img("logo.png", &img_size); // Get RAW data and size
63
    if(!file_data){
64
        return 1;
65
    }
66
 
67
    Image* image = img_decode(file_data, img_size, 0); // Decode RAW data to Image data
68
 
69
    if (image->Type != IMAGE_BPP32) {
70
        image = img_convert(image, NULL, IMAGE_BPP32, 0, 0); // Convert image to format BPP32
71
        if (!image) {
72
            printf("Сonvert error!: \n");
73
            return 1;
74
        }
75
    }
76
 
77
    image_blend = img_create(IMG_W+NEW_IMG_W, IMG_H, IMAGE_BPP32);  // Create an empty layer
78
    img_fill_color(image_blend, IMG_W+NEW_IMG_W, IMG_H, sys_color_table.work_area); // Fill the layer with one color
79
    img_blend(image_blend, image, 0, 0, 0, 0, IMG_W, IMG_H);  // Blending images to display the alpha channel.
80
    /* Reduce image size from 256x256 to 128x128 */
81
    image = img_scale(image, 0, 0, IMG_W, IMG_H, NULL, LIBIMG_SCALE_STRETCH , LIBIMG_INTER_BILINEAR, NEW_IMG_W, NEW_IMG_H);
82
    img_blend(image_blend, image, 256, 0, 0, 0, NEW_IMG_W, NEW_IMG_H);
83
    img_destroy(image);  // Destroy image structure
84
    free(file_data);  // Free allocated file_data buffer
85
 
86
    /* Main event loop */
87
    while (1) {
88
		switch(_ksys_get_event()){
89
			case KSYS_EVENT_REDRAW:
90
				draw_gui();
91
			break;
92
 
93
            case KSYS_EVENT_BUTTON:
94
				if (_ksys_get_button()==1){
95
                    return 0;
96
                }
97
			break;
98
        }
99
	}
100
	return 0;
101
}