From 07fde47bedc2793da9763b489274fa348b768faa Mon Sep 17 00:00:00 2001 From: Brett Bergstrom Date: Sun, 7 Sep 2025 22:06:52 -0500 Subject: [PATCH] corruption fix --- allegro_qoi.c | 24 ++++++++++-------------- 1 file changed, 10 insertions(+), 14 deletions(-) diff --git a/allegro_qoi.c b/allegro_qoi.c index 366fbdb..0f11b5b 100644 --- a/allegro_qoi.c +++ b/allegro_qoi.c @@ -17,35 +17,31 @@ ALLEGRO_BITMAP* _al_load_qoi_f(ALLEGRO_FILE* file, int flags) { uint8_t* file_bytes = malloc(al_fsize(file)); memset(file_bytes, 0, al_fsize(file)); void* file_pos = file_bytes; - int bytes_read = 0; #define chunk_size 1024 al_fseek(file, 0, SEEK_SET); - while (!al_feof(file)) { - bytes_read = al_fread(file, file_pos, chunk_size); - file_pos += bytes_read; - } + while (!al_feof(file)) + file_pos += al_fread(file, file_pos, chunk_size); void* data = qoi_decode(file_bytes, al_fsize(file), &meta, 0); free(file_bytes); if (!data) return NULL; int oldflags = al_get_new_bitmap_flags(); al_set_new_bitmap_flags(flags); - //ALLEGRO_PIXEL_FORMAT oldfmt = al_get_new_bitmap_format(); - //al_set_new_bitmap_format(ALLEGRO_PIXEL_FORMAT_ABGR_8888); ALLEGRO_BITMAP* bmp = al_create_bitmap(meta.width, meta.height); ALLEGRO_LOCKED_REGION* lock = al_lock_bitmap( - bmp, - ALLEGRO_PIXEL_FORMAT_ABGR_8888, - ALLEGRO_LOCK_WRITEONLY + bmp, + ALLEGRO_PIXEL_FORMAT_ABGR_8888, + ALLEGRO_LOCK_WRITEONLY ); - if (!lock) return NULL; al_set_new_bitmap_flags(oldflags); - //al_set_new_bitmap_format(oldfmt); + if (!lock) return NULL; - lock->data = data; + const int qoi_pitch = meta.width * meta.channels; + for (int i = 0; i < meta.height; i++) + memcpy(lock->data + lock->pitch*i, data + qoi_pitch*i, qoi_pitch); al_unlock_bitmap(bmp); - return bmp; + free(data); return bmp; } ALLEGRO_BITMAP* _al_load_qoi(const char* filename, int flags) {