@@ -7,6 +7,39 @@ static Janet cfun_LoadImage(int32_t argc, Janet *argv) {
77 return janet_wrap_abstract (image );
88}
99
10+ static Janet cfun_LoadImageFromBuffer (int32_t argc , Janet * argv ) {
11+ janet_fixarity (argc , 2 );
12+ const char * fileType = janet_getcstring (argv , 0 );
13+ JanetBuffer * data = janet_getbuffer (argv , 1 );
14+ Image * image = janet_abstract (& AT_Image , sizeof (Image ));
15+ * image = LoadImageFromMemory (fileType , data -> data , data -> count );
16+ return janet_wrap_abstract (image );
17+ }
18+
19+ static Janet cfun_GetBitmapHeaderBuffer (int32_t argc , Janet * argv ) {
20+ janet_fixarity (argc , 2 );
21+ int16_t sizeX = (int16_t )janet_getnumber (argv , 0 );
22+ int16_t sizeY = (int16_t )janet_getnumber (argv , 1 );
23+ const int32_t headerlength = 26 ;
24+ const int32_t magicheadersize = 12 ;
25+ const int16_t planes = 1 ;
26+ const int16_t bpp = 24 ;
27+ const int32_t filesize = headerlength + (sizeX * sizeY );
28+
29+ JanetBuffer * data = janet_buffer (filesize );
30+ janet_buffer_push_cstring (data , "BM" );
31+ janet_buffer_push_u32 (data , filesize );
32+ janet_buffer_push_u32 (data , 0 ); // should be two int16, reserved.
33+ janet_buffer_push_u32 (data , headerlength );
34+ janet_buffer_push_u32 (data , magicheadersize ); // if 12 we can skip alot of complicated(?) stuff in the header
35+ janet_buffer_push_u16 (data , sizeX );
36+ janet_buffer_push_u16 (data , sizeY );
37+ janet_buffer_push_u16 (data , planes );
38+ janet_buffer_push_u16 (data , bpp );
39+
40+ return janet_wrap_buffer (data );
41+ }
42+
1043static Janet cfun_IsImageReady (int32_t argc , Janet * argv ) {
1144 janet_fixarity (argc , 1 );
1245 Image image = * jaylib_getimage (argv , 0 );
@@ -651,6 +684,17 @@ static Janet cfun_GetImageDimensions(int32_t argc, Janet *argv) {
651684 return jaylib_wrap_vec2 (dim );
652685}
653686
687+ static Janet cfun_LoadImageFromMemory (int32_t argc , Janet * argv ) {
688+ janet_fixarity (argc , 3 );
689+ const char * fileType = janet_getcstring (argv , 0 );
690+ const unsigned char * fileData = janet_getbytes (argv , 1 ).bytes ;
691+ int dataSize = janet_getinteger (argv , 2 );
692+
693+ Image * image = janet_abstract (& AT_Image , sizeof (Image ));
694+ * image = LoadImageFromMemory (fileType , fileData , dataSize );
695+ return janet_wrap_abstract (image );
696+ }
697+
654698/*
655699// Image/Texture2D data loading/unloading/saving functions
656700RLAPI Image LoadImagePro(void *data, int width, int height, int format); // Load image from raw data with parameters
@@ -670,6 +714,14 @@ static const JanetReg image_cfuns[] = {
670714 "(load-image-1 file-name)\n\n"
671715 "Load image from file into CPU memory (RAM)"
672716 }, // load-image is janet core function, don't want to overwrite if we use (use jaylib)
717+ {"load-image-from-buffer" , cfun_LoadImageFromBuffer ,
718+ "(load-image-from-buffer file-type buffer)\n\n"
719+ "Load buffer as image object"
720+ },
721+ {"get-bitmap-header-buffer" , cfun_GetBitmapHeaderBuffer ,
722+ "(get-bitmap-header-buffer dimx dimy)\n\n"
723+ "returns a header for a 24bpp bitmap with dimensions dimx*dimy"
724+ },
673725 {"image-ready?" , cfun_IsImageReady ,
674726 "(image-ready? image)\n\n"
675727 "Check if an image is ready"
@@ -930,5 +982,9 @@ static const JanetReg image_cfuns[] = {
930982 "(set-texture-wrap texture wrap)\n\n"
931983 "Set texture wrapping mode"
932984 },
985+ {"load-image-from-memory" , cfun_LoadImageFromMemory ,
986+ "(load-image-from-memory filetype data size)\n\n"
987+ "Load image from memory buffer, fileType refers to extension: i.e. '.png'"
988+ },
933989 {NULL , NULL , NULL }
934990};
0 commit comments