=== modified file 'lib/image_science.rb' --- lib/image_science.rb 2007-12-03 14:10:29 +0000 +++ lib/image_science.rb 2007-12-03 14:12:58 +0000 @@ -87,16 +87,21 @@ builder.add_link_flags "-L/opt/local/lib" end - builder.add_link_flags "-lfreeimage" - builder.add_link_flags "-lstdc++" # only needed on PPC for some reason. lame + unless RUBY_PLATFORM =~ /mswin/ + builder.add_link_flags "-lfreeimage" + builder.add_link_flags "-lstdc++" # only needed on PPC for some reason. lame + else + builder.add_link_flags "freeimage.lib" + end builder.include '"FreeImage.h"' builder.prefix <<-"END" - #define GET_BITMAP(name) FIBITMAP *(name); Data_Get_Struct(self, FIBITMAP, (name)); if (!(name)) rb_raise(rb_eTypeError, "Bitmap has already been freed") + #define GET_BITMAP(name) Data_Get_Struct(self, FIBITMAP, (name)); if (!(name)) rb_raise(rb_eTypeError, "Bitmap has already been freed"); END builder.prefix <<-"END" VALUE unload(VALUE self) { + FIBITMAP *(bitmap); GET_BITMAP(bitmap); FreeImage_Unload(bitmap); @@ -143,12 +148,13 @@ VALUE with_image(char * input) { FREE_IMAGE_FORMAT fif = FIF_UNKNOWN; + int flags; fif = FreeImage_GetFileType(input, 0); if (fif == FIF_UNKNOWN) fif = FreeImage_GetFIFFromFilename(input); if ((fif != FIF_UNKNOWN) && FreeImage_FIFSupportsReading(fif)) { FIBITMAP *bitmap; VALUE result = Qnil; - int flags = fif == FIF_JPEG ? JPEG_ACCURATE : 0; + flags = (fif == FIF_JPEG) ? JPEG_ACCURATE : 0; if (bitmap = FreeImage_Load(fif, input, flags)) { result = wrap_and_yield(bitmap, self, fif); } @@ -162,6 +168,7 @@ VALUE with_crop(int l, int t, int r, int b) { FIBITMAP *copy; VALUE result = Qnil; + FIBITMAP *(bitmap); GET_BITMAP(bitmap); if (copy = FreeImage_Copy(bitmap, l, t, r, b)) { @@ -174,6 +181,7 @@ builder.c <<-"END" int height() { + FIBITMAP *(bitmap); GET_BITMAP(bitmap); return FreeImage_GetHeight(bitmap); @@ -182,6 +190,7 @@ builder.c <<-"END" int width() { + FIBITMAP *(bitmap); GET_BITMAP(bitmap); return FreeImage_GetWidth(bitmap); @@ -190,10 +199,13 @@ builder.c <<-"END" VALUE resize(long w, long h) { + FIBITMAP *(bitmap); + FIBITMAP *image; + if (w <= 0) rb_raise(rb_eArgError, "Width <= 0"); if (h <= 0) rb_raise(rb_eArgError, "Height <= 0"); GET_BITMAP(bitmap); - FIBITMAP *image = FreeImage_Rescale(bitmap, w, h, FILTER_CATMULLROM); + image = FreeImage_Rescale(bitmap, w, h, FILTER_CATMULLROM); if (image) { copy_icc_profile(self, bitmap, image); return wrap_and_yield(image, self, 0); @@ -204,11 +216,13 @@ builder.c <<-"END" VALUE save(char * output) { + int flags; + FIBITMAP *(bitmap); FREE_IMAGE_FORMAT fif = FreeImage_GetFIFFromFilename(output); if (fif == FIF_UNKNOWN) fif = FIX2INT(rb_iv_get(self, "@file_type")); if ((fif != FIF_UNKNOWN) && FreeImage_FIFSupportsWriting(fif)) { GET_BITMAP(bitmap); - int flags = fif == FIF_JPEG ? JPEG_QUALITYSUPERB : 0; + flags = (fif == FIF_JPEG) ? JPEG_QUALITYSUPERB : 0; if (fif == FIF_PNG) FreeImage_DestroyICCProfile(bitmap); return FreeImage_Save(fif, bitmap, output, flags) ? Qtrue : Qfalse; }