modularized code a bit, added readme

master
Anton Lydike 5 years ago
parent 21ef4f2e6d
commit ce8d9ebb24

@ -1,3 +1,21 @@
# C learning workplace # `images.h` - Image manipulation in C
here we learn C. An easy to use image creation tool for C.
## Features
* Save images as `.bmp` bitmaps
* Draw Rectangles, squares and circles
* Colors with transparency
* draw on individual pixels
## Might be added later
* draw lines
* draw lines on a path
* complex shapes?
## Performance
While perfomance is not through the roof, creating a 4k image with a simple color gradient takes about 1.5s on a mobile ryzen 5 chip. Smaller graphics (like the transparency demo) are drawn and saved within 20ms, so that's okay, I guess...

@ -0,0 +1,32 @@
#include "images.h"
Color color_new(int r, int g, int b) {
Color c;
c.r = r;
c.g = g;
c.b = b;
c.alpha = 1;
return c;
}
Color color_new_alpha(int r, int g, int b, float alpha) {
Color c;
c.r = r;
c.g = g;
c.b = b;
c.alpha = alpha;
return c;
}
void print_color(Color c) {
printf("color is: #%02hhX%02hhX%02hhX\n", c.r, c.g, c.b);
}
Color color_mix(Color c1, Color c2, float ratio) {
return color_new_alpha(
ratio * c1.r + ((1 - ratio) * c2.r),
ratio * c1.g + ((1 - ratio) * c2.g),
ratio * c1.b + ((1 - ratio) * c2.b),
ratio * c1.alpha + ((1 - ratio) * c2.alpha)
);
}

@ -0,0 +1,36 @@
#include "images.h"
int image_draw_rect(Image image, int x1, int y1, int x2, int y2, Color color) {
int retval = 1;
int y;
for (; x1 < x2; x1++) {
for (y = y1; y < y2; y++) {
if (!image_set_px_c(image, x1, y, color)) retval = 0;
}
}
return retval;
}
int image_draw_circ(Image image, int x, int y, int r, Color color) {
int retval = 1;
int i, j, r2 = r * r;
for (i = -r+1; i < r; i++) {
for (j = -r+1; j < r; j++) {
if (i*i + j*j >= r2) continue;
if (!image_set_px_c(image, x + i, y + j, color)) retval = 0;
}
}
return retval;
}
int image_draw_square(Image image, int x, int y, int size, Color color) {
int retval = 1;
int i, j;
for (i = -size / 2; i <= size / 2; i++) {
for (j = -size / 2; j <= size / 2; j++) {
if (!image_set_px_c(image, x + i, y + j, color)) retval = 0;
}
}
return retval;
}

@ -64,77 +64,3 @@ int image_destroy(Image image) {
return 1; return 1;
} }
///////// Colors
Color color_new(int r, int g, int b) {
Color c;
c.r = r;
c.g = g;
c.b = b;
c.alpha = 1;
return c;
}
Color color_new_alpha(int r, int g, int b, float alpha) {
Color c;
c.r = r;
c.g = g;
c.b = b;
c.alpha = alpha;
return c;
}
void print_color(Color c) {
printf("color is: #%02hhX%02hhX%02hhX\n", c.r, c.g, c.b);
}
Color color_mix(Color c1, Color c2, float ratio) {
return color_new_alpha(
ratio * c1.r + ((1 - ratio) * c2.r),
ratio * c1.g + ((1 - ratio) * c2.g),
ratio * c1.b + ((1 - ratio) * c2.b),
ratio * c1.alpha + ((1 - ratio) * c2.alpha)
);
}
//// IMAGE DRAWING HELPERS
int image_draw_rect(Image image, int x1, int y1, int x2, int y2, Color color) {
int retval = 1;
int y;
for (; x1 < x2; x1++) {
for (y = y1; y < y2; y++) {
if (!image_set_px_c(image, x1, y, color)) retval = 0;
}
}
return retval;
}
int image_draw_circ(Image image, int x, int y, int r, Color color) {
int retval = 1;
int i, j, r2 = r * r;
for (i = -r+1; i < r; i++) {
for (j = -r+1; j < r; j++) {
if (i*i + j*j >= r2) continue;
if (!image_set_px_c(image, x + i, y + j, color)) retval = 0;
}
}
return retval;
}
int image_draw_square(Image image, int x, int y, int size, Color color) {
int retval = 1;
int i, j;
for (i = -size / 2; i <= size / 2; i++) {
for (j = -size / 2; j <= size / 2; j++) {
if (!image_set_px_c(image, x + i, y + j, color)) retval = 0;
}
}
return retval;
}

@ -1,5 +1,5 @@
#ifndef IMAGES_H #ifndef IMAGES_H
#define IMAGES_H #define IMAGES_H "v0.1.0"
typedef struct _color { typedef struct _color {
unsigned char r; unsigned char r;
@ -47,5 +47,7 @@ int image_save_bmp(Image image, char* path);
#include "images.c" #include "images.c"
#include "bmp-format.c" #include "bmp-format.c"
#include "color.c"
#include "drawing.c"
#endif #endif
Loading…
Cancel
Save