|
BITMAP quality gets reduced |
Doctor Cop
Member #16,833
April 2018
|
When I loaded a jpeg image just to test how would background saturation work, I found that the loaded bitmap was of low quality. Why? Loaded Bitmap : Original Bitmap :
|
Elias
Member #358
May 2000
|
The scaling algorithm. The original is 4896x3264 pixel, your screenshot is 810x629 pixel. I assume you are drawing it with al_draw_scaled_bitmap? In that case try calling this before loading the bitmap: al_set_new_bitmap_flags(ALLEGRO_MIN_LINEAR); That should make Allegro use linear scaling. -- |
Doctor Cop
Member #16,833
April 2018
|
This didn't work. al_set_new_bitmap_flags(ALLEGRO_MIN_LINEAR); didn't do anything. Do I need to convert my image file's size?
|
Edgar Reynaldo
Major Reynaldo
May 2007
|
I can't even tell the difference between the two images. :/ Allegro will load the file at the same resolution it is in. ALLEGRO_MIN_LINEAR will make allegro use linear filtering when reducing the image size. This can look better than nearest neighbor. Show more code. My Website! | EAGLE GUI Library Demos | My Deviant Art Gallery | Spiraloid Preview | A4 FontMaker | Skyline! (Missile Defense) Eagle and Allegro 5 binaries | Older Allegro 4 and 5 binaries | Allegro 5 compile guide |
Doctor Cop
Member #16,833
April 2018
|
1#include <allegro5/allegro_image.h>
2#include <allegro5/allegro_font.h>
3#include <allegro5/allegro_ttf.h>
4#include <allegro5/keyboard.h>
5#include <allegro5/mouse.h>
6
7#define MAXWIDTH 800
8#define MAXHEIGHT 600
9
10int main()
11{
12 al_init();
13 al_init_primitives_addon();
14 al_init_image_addon();
15 al_init_font_addon();
16 al_init_ttf_addon();
17 al_install_keyboard();
18 al_install_mouse();
19
20 ALLEGRO_DISPLAY *display = al_create_display(MAXWIDTH, MAXHEIGHT);
21 ALLEGRO_EVENT_QUEUE *queue = al_create_event_queue();
22 ALLEGRO_TIMER *timer = al_create_timer(2.0/60.0);
23 ALLEGRO_COLOR black = al_map_rgb(0, 0, 0);
24 ALLEGRO_FONT *font = al_load_ttf_font("res/L.ttf", 14, 1);
25 ALLEGRO_BITMAP *background = al_load_bitmap("res/background.jpg");
26 int x=0, y=0, main_loop = true;
27
28 al_register_event_source(queue, al_get_display_event_source(display));
29 al_register_event_source(queue, al_get_mouse_event_source());
30 al_register_event_source(queue, al_get_keyboard_event_source());
31 al_register_event_source(queue, al_get_timer_event_source(timer));
32
33 al_start_timer(timer);
34
35 while(main_loop)
36 {
37 ALLEGRO_EVENT event;
38
39 //if(al_is_event_queue_empty(queue))
40 al_wait_for_event(queue, &event);
41
42 if(event.type == ALLEGRO_EVENT_DISPLAY_CLOSE)
43 main_loop = false;
44
45 if(event.type == ALLEGRO_EVENT_TIMER)
46 {
47 al_clear_to_color(al_map_rgb(218, 112, 214));
48
49 al_set_new_bitmap_flags(ALLEGRO_MIN_LINEAR);
50
51 al_draw_scaled_bitmap(background, 0, 0, 4896, 3264, 0, 0, 800, 600, 0);
52 //al_draw_rounded_rectangle(400-100 + x, 300-20, 400+100 + x, 300+20, 20, 20, al_map_rgb(70, 60, 100), 2);
53 //al_draw_filled_rectangle(0, 0, 50, 50, al_map_rgb(255, 255, 255));
54 //al_draw_filled_rectangle(0, 50, 50, MAXHEIGHT, al_map_rgb(255, 0, 255));
55 //al_draw_line(50, 0, 50, MAXHEIGHT, black, 1);
56
57
58 al_flip_display();
59 al_rest(0.02);
60 }
61
62 if(event.type == ALLEGRO_EVENT_KEY_DOWN)
63 {
64 switch(event.keyboard.keycode)
65 {
66 case ALLEGRO_KEY_ESCAPE :
67 exit(1);
68 break;
69 }
70 }
71
72 }
73
74 al_destroy_display(display);
75 al_destroy_event_queue(queue);
76 return 0;
77}
|
Edgar Reynaldo
Major Reynaldo
May 2007
|
Doctor Cop said: You have to call this BEFORE loading your bitmap. THEN when it gets drawn it will be multisampled. My Website! | EAGLE GUI Library Demos | My Deviant Art Gallery | Spiraloid Preview | A4 FontMaker | Skyline! (Missile Defense) Eagle and Allegro 5 binaries | Older Allegro 4 and 5 binaries | Allegro 5 compile guide |
Doctor Cop
Member #16,833
April 2018
|
Thanks, Edgar, it worked just fine. although there is still some noise but its smoother than before.
|
Elias
Member #358
May 2000
|
Yes, linear scaling is not the highest quality. If this is for something like background pictures for a game you could maybe provide pre-scaled versions for smaller resolutions. At least then you'd only have to use a little bit of linear scaling - I imagine that would still look better than scaling down from the 4K resolution (not completely sure - but easy to try). -- |
|