@@ -597,14 +597,14 @@ static Value load_with_gdiplus(Interpreter* interp, const char* path, int line,
597597
598598static Value save_with_gdiplus (Interpreter * interp , Value imgv , const char * path , const WCHAR * mime , int quality , int line , int col ) {
599599 ImageView iv ;
600- if (!image_from_value (interp , imgv , "SAVE_*" , line , col , & iv )) return value_int ( 0 );
601- if (!ensure_gdiplus (interp , line , col )) return value_int ( 0 );
600+ if (!image_from_value (interp , imgv , "SAVE_*" , line , col , & iv )) return value_null ( );
601+ if (!ensure_gdiplus (interp , line , col )) return value_null ( );
602602
603603 int w = (int )iv .w ;
604604 int h = (int )iv .h ;
605605 int stride = w * 4 ;
606606 uint8_t * bgra = (uint8_t * )malloc ((size_t )stride * (size_t )h );
607- if (!bgra ) { set_runtime_error (interp , "image: out of memory" , line , col ); return value_int ( 0 ); }
607+ if (!bgra ) { set_runtime_error (interp , "image: out of memory" , line , col ); return value_null ( ); }
608608
609609 for (int y = 0 ; y < h ; y ++ ) {
610610 uint8_t * row = bgra + (size_t )y * (size_t )stride ;
@@ -625,15 +625,15 @@ static Value save_with_gdiplus(Interpreter* interp, Value imgv, const char* path
625625 if (pGdipCreateBitmapFromScan0 (w , h , stride , PixelFormat32bppARGB_C , bgra , & bmp ) != 0 || !bmp ) {
626626 free (bgra );
627627 set_runtime_error (interp , "image: failed to create bitmap" , line , col );
628- return value_int ( 0 );
628+ return value_null ( );
629629 }
630630
631631 CLSID clsid ;
632632 if (!encoder_clsid_for_mime (mime , & clsid )) {
633633 pGdipDisposeImage ((GpImage_C * )bmp );
634634 free (bgra );
635635 set_runtime_error (interp , "image: encoder unavailable" , line , col );
636- return value_int ( 0 );
636+ return value_null ( );
637637 }
638638
639639 WCHAR * wpath = NULL ;
@@ -642,7 +642,7 @@ static Value save_with_gdiplus(Interpreter* interp, Value imgv, const char* path
642642 free (bgra );
643643 free (wpath );
644644 set_runtime_error (interp , "image: invalid UTF-8 path" , line , col );
645- return value_int ( 0 );
645+ return value_null ( );
646646 }
647647
648648 static const GUID EncoderQuality = {0x1d5be4b5 , 0xfa4a , 0x452d , {0x9c , 0xdd , 0x5d , 0xb3 , 0x51 , 0x05 , 0xe7 , 0xeb }};
@@ -659,8 +659,8 @@ static Value save_with_gdiplus(Interpreter* interp, Value imgv, const char* path
659659 pGdipDisposeImage ((GpImage_C * )bmp );
660660 free (bgra );
661661
662- if (st != 0 ) { set_runtime_error (interp , "image: failed to save image" , line , col ); return value_int ( 0 ); }
663- return value_int ( 1 );
662+ if (st != 0 ) { set_runtime_error (interp , "image: failed to save image" , line , col ); return value_null ( ); }
663+ return value_bool (true );
664664}
665665#endif
666666
@@ -711,16 +711,15 @@ static Value op_save_png(Interpreter* interp, Value* args, int argc, Expr** arg_
711711 (void )env ;
712712 if (!expect_argc_range (interp , argc , 2 , 3 , "SAVE_PNG" , line , col )) return value_null ();
713713 const char * path = expect_str (interp , args [1 ], "SAVE_PNG" , line , col );
714- if (interp -> error ) return value_int ( 0 );
714+ if (interp -> error ) return value_null ( );
715715 int quality = 100 ;
716716 if (argc >= 3 ) quality = (int )expect_int (interp , args [2 ], "SAVE_PNG" , line , col );
717717 if (interp -> error ) return value_null ();
718718#ifdef _WIN32
719719 return save_with_gdiplus (interp , args [0 ], path , L"image/png" , quality , line , col );
720720#else
721721 (void )quality ;
722- set_runtime_error (interp , "SAVE_PNG not supported on this platform" , line , col );
723- return value_int (0 );
722+ return fail (interp , "SAVE_PNG not supported on this platform" , line , col );
724723#endif
725724}
726725
@@ -729,16 +728,15 @@ static Value op_save_jpeg(Interpreter* interp, Value* args, int argc, Expr** arg
729728 (void )env ;
730729 if (!expect_argc_range (interp , argc , 2 , 3 , "SAVE_JPEG" , line , col )) return value_null ();
731730 const char * path = expect_str (interp , args [1 ], "SAVE_JPEG" , line , col );
732- if (interp -> error ) return value_int ( 0 );
731+ if (interp -> error ) return value_null ( );
733732 int quality = 85 ;
734733 if (argc >= 3 ) quality = (int )expect_int (interp , args [2 ], "SAVE_JPEG" , line , col );
735734 if (interp -> error ) return value_null ();
736735#ifdef _WIN32
737736 return save_with_gdiplus (interp , args [0 ], path , L"image/jpeg" , quality , line , col );
738737#else
739738 (void )quality ;
740- set_runtime_error (interp , "SAVE_JPEG not supported on this platform" , line , col );
741- return value_int (0 );
739+ return fail (interp , "SAVE_JPEG not supported on this platform" , line , col );
742740#endif
743741}
744742
@@ -747,12 +745,11 @@ static Value op_save_bmp(Interpreter* interp, Value* args, int argc, Expr** arg_
747745 (void )env ;
748746 if (!expect_argc_range (interp , argc , 2 , 2 , "SAVE_BMP" , line , col )) return value_null ();
749747 const char * path = expect_str (interp , args [1 ], "SAVE_BMP" , line , col );
750- if (interp -> error ) return value_int ( 0 );
748+ if (interp -> error ) return value_null ( );
751749#ifdef _WIN32
752750 return save_with_gdiplus (interp , args [0 ], path , L"image/bmp" , 100 , line , col );
753751#else
754- set_runtime_error (interp , "SAVE_BMP not supported on this platform" , line , col );
755- return value_int (0 );
752+ return fail (interp , "SAVE_BMP not supported on this platform" , line , col );
756753#endif
757754}
758755
0 commit comments