modularized code a bit, added readme
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;
|
||||||
|
}
|
Loading…
Reference in New Issue