@@ -7,6 +7,39 @@ static Janet cfun_LoadImage(int32_t argc, Janet *argv) {
7
7
return janet_wrap_abstract (image );
8
8
}
9
9
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
+
10
43
static Janet cfun_IsImageReady (int32_t argc , Janet * argv ) {
11
44
janet_fixarity (argc , 1 );
12
45
Image image = * jaylib_getimage (argv , 0 );
@@ -651,6 +684,17 @@ static Janet cfun_GetImageDimensions(int32_t argc, Janet *argv) {
651
684
return jaylib_wrap_vec2 (dim );
652
685
}
653
686
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
+
654
698
/*
655
699
// Image/Texture2D data loading/unloading/saving functions
656
700
RLAPI 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[] = {
670
714
"(load-image-1 file-name)\n\n"
671
715
"Load image from file into CPU memory (RAM)"
672
716
}, // 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
+ },
673
725
{"image-ready?" , cfun_IsImageReady ,
674
726
"(image-ready? image)\n\n"
675
727
"Check if an image is ready"
@@ -930,5 +982,9 @@ static const JanetReg image_cfuns[] = {
930
982
"(set-texture-wrap texture wrap)\n\n"
931
983
"Set texture wrapping mode"
932
984
},
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
+ },
933
989
{NULL , NULL , NULL }
934
990
};
0 commit comments