rfreeimage 0.1.1 → 0.1.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d8d7e7bca8f13f158da2617a15667627c8a0c31a
4
- data.tar.gz: 638dacb99a69891c7cbd5112e31a4c9b13e28680
3
+ metadata.gz: da114f86318598af6b06aa737c0fed85bf78887a
4
+ data.tar.gz: 662cebc27f59581a9629a1dc95ad834577d3f76b
5
5
  SHA512:
6
- metadata.gz: af82826b1c9556159e616dca72a0e639dd7897b8aa9e00934cd2ffb62e24710b9f2956afae22ecb862f63548bb2b48754e760dda623b07e7fe4b4079cb0884e5
7
- data.tar.gz: cdab92f66f9dcb575d3d429e63e3eaef0b8c5770ae703ddab435a244a4972d19bd496662de6a7483beaaf9efcff0948baaaf695018df1c5dfd5c41f611cc5d70
6
+ metadata.gz: 24f80a22be77f83cbaf072b5d755f58fd0758eb17f3bb1dfff4ac4497c5d55a3da6c9c64341f999814a7ae469020a0a76aacc9adf142ba663ab217ae25acbb23
7
+ data.tar.gz: 07af6587e3247f9e74db0cab5471a34571fecef781704c58e675b27a1a463dcd8564de14f7394d38f038408b041b46f6047a7c50c7b4b561b9d19ab02f165d8c
@@ -6,6 +6,7 @@ $CFLAGS << " #{ENV["CFLAGS"]}"
6
6
  $CFLAGS << " -g"
7
7
  $CFLAGS << " -O3" unless $CFLAGS[/-O\d/]
8
8
  $CFLAGS << " -Wall -Wno-comment"
9
+ $LDFLAGS << "-Wl,--exclude-libs=ALL"
9
10
 
10
11
  def sys(cmd)
11
12
  puts " -- #{cmd}"
@@ -218,6 +218,53 @@ VALUE Image_save(VALUE self, VALUE file)
218
218
  return Qnil;
219
219
  }
220
220
 
221
+ VALUE Image_to_blob(VALUE self, VALUE type)
222
+ {
223
+ char *filetype;
224
+ struct native_image* img;
225
+ FIMEMORY *hmem;
226
+ BOOL result;
227
+ FREE_IMAGE_FORMAT out_fif;
228
+ VALUE ret;
229
+ BYTE *raw = NULL;
230
+ DWORD file_size;
231
+
232
+ Data_Get_Struct(self, struct native_image, img);
233
+ RFI_CHECK_IMG(img);
234
+
235
+ Check_Type(type, T_STRING);
236
+ filetype = rfi_value_to_str(type);
237
+
238
+ out_fif = FreeImage_GetFIFFromFormat(filetype);
239
+ free(filetype);
240
+ if (out_fif == FIF_UNKNOWN)
241
+ rb_raise(Class_RFIError, "Invalid format");
242
+
243
+ hmem = FreeImage_OpenMemory(0, 0);
244
+ if (!hmem)
245
+ rb_raise(rb_eIOError, "Fail to allocate blob");
246
+ if (out_fif == FIF_JPEG && img->bpp != 8 && img->bpp != 24) {
247
+ FIBITMAP *to_save = FreeImage_ConvertTo24Bits(img->handle);
248
+ result = FreeImage_SaveToMemory(out_fif, to_save, hmem, JPEG_BASELINE);
249
+ FreeImage_Unload(to_save);
250
+ } else {
251
+ result = FreeImage_SaveToMemory(out_fif, img->handle, hmem, 0);
252
+ }
253
+
254
+ if(!result) {
255
+ FreeImage_CloseMemory(hmem);
256
+ rb_raise(rb_eIOError, "Fail to save image to blob");
257
+ }
258
+ file_size = FreeImage_TellMemory(hmem);
259
+ FreeImage_SeekMemory(hmem, 0, SEEK_SET);
260
+ FreeImage_AcquireMemory(hmem, &raw, &file_size);
261
+ ret = rb_str_new((char*)raw, (long)file_size);
262
+ FreeImage_CloseMemory(hmem);
263
+ return ret;
264
+ }
265
+
266
+
267
+
221
268
 
222
269
  VALUE Image_cols(VALUE self)
223
270
  {
@@ -449,6 +496,49 @@ VALUE Image_ping_blob(VALUE self, VALUE blob)
449
496
  return v;
450
497
  }
451
498
 
499
+ VALUE Image_from_bytes(VALUE self, VALUE bytes, VALUE width,
500
+ VALUE height, VALUE stride, VALUE bpp)
501
+ {
502
+ long f_len;
503
+ int _bpp = NUM2INT(bpp);
504
+ char *ptr;
505
+ unsigned char *p;
506
+ int i;
507
+ int src_stride = NUM2INT(stride);
508
+ FIBITMAP *h;
509
+
510
+ ALLOC_NEW_IMAGE(v, img);
511
+
512
+ if (_bpp != 8 && _bpp != 32)
513
+ rb_raise(rb_eArgError, "bpp must be 8 or 32");
514
+ Check_Type(bytes, T_STRING);
515
+ f_len = RSTRING_LEN(bytes);
516
+ if (f_len < (long)src_stride * NUM2INT(height))
517
+ rb_raise(rb_eArgError, "buffer too small");
518
+
519
+ h = FreeImage_Allocate(NUM2INT(width), NUM2INT(height), _bpp, 0, 0, 0);
520
+ if (!h)
521
+ rb_raise(rb_eArgError, "fail to allocate image");
522
+
523
+ img->handle = h;
524
+ img->w = FreeImage_GetWidth(h);
525
+ img->h = FreeImage_GetHeight(h);
526
+ img->bpp = FreeImage_GetBPP(h);
527
+ img->stride = FreeImage_GetPitch(h);
528
+ img->fif = FIF_BMP;
529
+
530
+ /* up-side-down */
531
+ p = FreeImage_GetBits(img->handle);
532
+ ptr = RSTRING_PTR(bytes) + img->h * src_stride;
533
+ for(i = 0; i < img->h; i++) {
534
+ ptr -= src_stride;
535
+ memcpy(p, ptr, img->stride);
536
+ p += img->stride;
537
+ }
538
+
539
+ return v;
540
+ }
541
+
452
542
  /* draw */
453
543
  VALUE Image_draw_point(VALUE self, VALUE _x, VALUE _y, VALUE color, VALUE _size)
454
544
  {
@@ -536,6 +626,7 @@ void Init_rfreeimage(void)
536
626
  rb_define_method(Class_Image, "rotate", Image_rotate, 1);
537
627
  rb_define_method(Class_Image, "resize", Image_resize, 2);
538
628
  rb_define_method(Class_Image, "crop", Image_crop, 4);
629
+ rb_define_method(Class_Image, "to_blob", Image_to_blob, 1);
539
630
 
540
631
  /* draw */
541
632
  rb_define_method(Class_Image, "draw_point", Image_draw_point, 4);
@@ -544,4 +635,5 @@ void Init_rfreeimage(void)
544
635
  rb_define_singleton_method(Class_Image, "ping", Image_ping, 1);
545
636
  rb_define_singleton_method(Class_Image, "from_blob", Image_from_blob, -1);
546
637
  rb_define_singleton_method(Class_Image, "ping_blob", Image_ping_blob, 1);
638
+ rb_define_singleton_method(Class_Image, "from_bytes", Image_from_bytes, 5);
547
639
  }
@@ -1,3 +1,3 @@
1
1
  module RFreeImage
2
- VERSION = '0.1.1'
2
+ VERSION = '0.1.3'
3
3
  end
@@ -1,4 +1,4 @@
1
- /* Library for accessing X3F Files
1
+ /* Library for accessing X3F Files
2
2
  ----------------------------------------------------------------
3
3
  BSD-style License
4
4
  ----------------------------------------------------------------
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rfreeimage
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yuheng Chen
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-04-02 00:00:00.000000000 Z
11
+ date: 2015-10-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake-compiler