add a readme
This commit is contained in:
9
README.md
Normal file
9
README.md
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
# QOI for Allegro
|
||||||
|
|
||||||
|
This is a simple liballeg plugin that gives Allegro the ability to decode QOI images, in both 24-bit and 32-bit formats.
|
||||||
|
|
||||||
|
Some example images and a test program are provided. All of the code is in allegro_qoi.c. The header file declares only a single function `al_init_qoi()` which takes no parameters (same thing as `al_init_image_addon()`). Call it once when your program starts.
|
||||||
|
|
||||||
|
If you want you can also just drop the `allegro_qoi.c` into your project and forward-declare it's init function once where it's used.
|
||||||
|
|
||||||
|
This plugin does not handle saving QOI images yet.
|
||||||
@@ -14,6 +14,7 @@ extern "C" {
|
|||||||
|
|
||||||
ALLEGRO_BITMAP* _al_load_qoi_f(ALLEGRO_FILE* file, int flags) {
|
ALLEGRO_BITMAP* _al_load_qoi_f(ALLEGRO_FILE* file, int flags) {
|
||||||
qoi_desc meta;
|
qoi_desc meta;
|
||||||
|
ALLEGRO_PIXEL_FORMAT fmt;
|
||||||
uint8_t* file_bytes = malloc(al_fsize(file));
|
uint8_t* file_bytes = malloc(al_fsize(file));
|
||||||
memset(file_bytes, 0, al_fsize(file));
|
memset(file_bytes, 0, al_fsize(file));
|
||||||
void* file_pos = file_bytes;
|
void* file_pos = file_bytes;
|
||||||
@@ -27,10 +28,15 @@ ALLEGRO_BITMAP* _al_load_qoi_f(ALLEGRO_FILE* file, int flags) {
|
|||||||
|
|
||||||
int oldflags = al_get_new_bitmap_flags();
|
int oldflags = al_get_new_bitmap_flags();
|
||||||
al_set_new_bitmap_flags(flags);
|
al_set_new_bitmap_flags(flags);
|
||||||
|
switch (meta.channels) {
|
||||||
|
case 3: fmt = ALLEGRO_PIXEL_FORMAT_BGR_888; break;
|
||||||
|
case 4: fmt = ALLEGRO_PIXEL_FORMAT_ABGR_8888; break;
|
||||||
|
default: free(data); return NULL; break;
|
||||||
|
}
|
||||||
ALLEGRO_BITMAP* bmp = al_create_bitmap(meta.width, meta.height);
|
ALLEGRO_BITMAP* bmp = al_create_bitmap(meta.width, meta.height);
|
||||||
ALLEGRO_LOCKED_REGION* lock = al_lock_bitmap(
|
ALLEGRO_LOCKED_REGION* lock = al_lock_bitmap(
|
||||||
bmp,
|
bmp,
|
||||||
ALLEGRO_PIXEL_FORMAT_ABGR_8888,
|
fmt,
|
||||||
ALLEGRO_LOCK_WRITEONLY
|
ALLEGRO_LOCK_WRITEONLY
|
||||||
);
|
);
|
||||||
al_set_new_bitmap_flags(oldflags);
|
al_set_new_bitmap_flags(oldflags);
|
||||||
|
|||||||
16
sample.c
16
sample.c
@@ -1,24 +1,30 @@
|
|||||||
// This program simply loads a QOI file into Allegro
|
// This program simply loads a QOI file into Allegro
|
||||||
// as a texture and then dumps the texture data as a PNG.
|
// as a texture and then dumps the texture data as a PNG.
|
||||||
// Take notice of lines 20 and 21. You only need to initialize
|
// Take notice of lines 26 and 27. You only need to initialize
|
||||||
// the QOI plugin (this registers the function hooks that Allegro
|
// the QOI plugin (this registers the function hooks that Allegro
|
||||||
// will use whenever you want to I/O on a filename ending in .qoi)
|
// will use whenever you want to I/O on a filename ending in .qoi)
|
||||||
//
|
//
|
||||||
// Compile the test program with:
|
// Compile the sample program with:
|
||||||
// gcc -o test allegro_qoi.c test.c -lallegro -lallegro_image -I./
|
// gcc -o sample allegro_qoi.c sample.c -lallegro -lallegro_image -I./
|
||||||
|
// Then run it with a QOI image as the first argument.
|
||||||
//
|
//
|
||||||
// qoi.h should be inside of your include path.
|
// qoi.h should be inside of your include path.
|
||||||
// Either place it here, or in your system's global includes.
|
// Either place it here, or in your system's global includes.
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
#include <allegro5/allegro.h>
|
#include <allegro5/allegro.h>
|
||||||
#include <allegro5/allegro_image.h>
|
#include <allegro5/allegro_image.h>
|
||||||
#include "allegro_qoi.h"
|
#include "allegro_qoi.h"
|
||||||
|
|
||||||
int main() {
|
int main(int argc, char **argv) {
|
||||||
|
if (argc < 2) {
|
||||||
|
printf("Usage: sample <filename>\n");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
al_init();
|
al_init();
|
||||||
al_init_image_addon();
|
al_init_image_addon();
|
||||||
al_init_qoi();
|
al_init_qoi();
|
||||||
ALLEGRO_BITMAP* bmp = al_load_bitmap("sample.qoi");
|
ALLEGRO_BITMAP* bmp = al_load_bitmap(argv[1]);
|
||||||
al_save_bitmap("out.png", bmp);
|
al_save_bitmap("out.png", bmp);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|||||||
BIN
sample_KDE.qoi
Normal file
BIN
sample_KDE.qoi
Normal file
Binary file not shown.
BIN
sample_VanGoghAlive.qoi
Normal file
BIN
sample_VanGoghAlive.qoi
Normal file
Binary file not shown.
BIN
sample_WipeoutPepsi.qoi
Normal file
BIN
sample_WipeoutPepsi.qoi
Normal file
Binary file not shown.
BIN
sample_caniwall.qoi
Normal file
BIN
sample_caniwall.qoi
Normal file
Binary file not shown.
Reference in New Issue
Block a user