Subversion Repositories Kolibri OS

Rev

Rev 9620 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

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