add: image is now printable
This commit is contained in:
parent
d39f708a51
commit
d6a59da6d1
9
headers/icon.h
Normal file
9
headers/icon.h
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
|
struct icon {
|
||||||
|
uint32_t height;
|
||||||
|
uint32_t width;
|
||||||
|
uint32_t *pixels;
|
||||||
|
};
|
13
headers/icons/image.h
Normal file
13
headers/icons/image.h
Normal file
File diff suppressed because one or more lines are too long
37
script/icon_maker.py
Normal file
37
script/icon_maker.py
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
from PIL import Image
|
||||||
|
|
||||||
|
import sys
|
||||||
|
import os
|
||||||
|
|
||||||
|
|
||||||
|
if (len(sys.argv) < 2):
|
||||||
|
print("Error: usage python icon_maker.py {img}")
|
||||||
|
|
||||||
|
image = Image.open(sys.argv[1])
|
||||||
|
|
||||||
|
width, height = image.size
|
||||||
|
pixels = list(image.getdata())
|
||||||
|
pixels = [r << 16 | g << 8 | b for r, g, b in pixels]
|
||||||
|
|
||||||
|
string = str(pixels).replace("(", "{").replace(")", "}").replace("[", "{").replace("]", "}")
|
||||||
|
|
||||||
|
filename: str = os.path.basename(sys.argv[1]).split(".")[0]
|
||||||
|
|
||||||
|
string = f"""\
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
|
#include "icon.h"
|
||||||
|
|
||||||
|
uint32_t {filename}_color_map[{width} * {height}] = {string};
|
||||||
|
|
||||||
|
struct icon {filename}_icon = {{
|
||||||
|
.height = {height},
|
||||||
|
.width = {width},
|
||||||
|
.pixels = {filename}_color_map
|
||||||
|
}};
|
||||||
|
|
||||||
|
"""
|
||||||
|
|
||||||
|
with open(f"./headers/icons/{filename}.h", "w") as f:
|
||||||
|
f.write(string)
|
24
src/kernel.c
24
src/kernel.c
@ -2,6 +2,8 @@
|
|||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
#include "drivers.h"
|
#include "drivers.h"
|
||||||
#include "gdt.h"
|
#include "gdt.h"
|
||||||
|
#include "icon.h"
|
||||||
|
#include "icons/image.h"
|
||||||
#include "idt.h"
|
#include "idt.h"
|
||||||
#include "kprintf.h"
|
#include "kprintf.h"
|
||||||
#include "memory.h"
|
#include "memory.h"
|
||||||
@ -29,11 +31,22 @@
|
|||||||
|
|
||||||
static void put_pixel(uint32_t color, uint32_t x, uint32_t y)
|
static void put_pixel(uint32_t color, uint32_t x, uint32_t y)
|
||||||
{
|
{
|
||||||
// / 4 cause display.buff is in 32bit instead of 8bit
|
// /
|
||||||
|
// 4 cause display.buff is in 32bit instead of 8bit
|
||||||
const uint32_t coords = x + y * display.pitch / 4;
|
const uint32_t coords = x + y * display.pitch / 4;
|
||||||
display.buff[coords] = color;
|
display.buff[coords] = color;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void draw_icon(uint32_t pos_x, uint32_t pos_y, struct icon *img)
|
||||||
|
{
|
||||||
|
for (uint32_t y = 0; y < img->height; y++) {
|
||||||
|
for (uint32_t x = 0; x < img->width; x++) {
|
||||||
|
put_pixel(img->pixels[y * img->width + x], pos_x + x,
|
||||||
|
pos_y + y);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void kernel_main(multiboot_info_t *mbd, uint32_t magic)
|
void kernel_main(multiboot_info_t *mbd, uint32_t magic)
|
||||||
{
|
{
|
||||||
/* terminal_initialize(); */
|
/* terminal_initialize(); */
|
||||||
@ -47,14 +60,7 @@ void kernel_main(multiboot_info_t *mbd, uint32_t magic)
|
|||||||
/* "complex 8*unknown quantity -byte descriptor table. -- Troy "
|
/* "complex 8*unknown quantity -byte descriptor table. -- Troy "
|
||||||
*/
|
*/
|
||||||
/* "Martin 03:50, 22 March 2009 (UTC)\n"); */
|
/* "Martin 03:50, 22 March 2009 (UTC)\n"); */
|
||||||
uint32_t color = 0 << 16 | 128 << 8 | 128;
|
draw_icon(0, 0, &image_icon);
|
||||||
for (size_t i = 0; i < 100; i++) {
|
|
||||||
put_pixel(color, 10, i);
|
|
||||||
put_pixel(color, 11, i);
|
|
||||||
put_pixel(color, 12, i);
|
|
||||||
put_pixel(color, 13, i);
|
|
||||||
put_pixel(color, 14, i);
|
|
||||||
}
|
|
||||||
/* memset(display.buff, 255, 1024 * 1024); */
|
/* memset(display.buff, 255, 1024 * 1024); */
|
||||||
/* shell_init(); */
|
/* shell_init(); */
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user