Example #1
0
VALUE rb_graffik_cropped_thumbnail(VALUE self, VALUE rb_size) {
  // Convert the Ruby numbers to C numbers
  int size = FIX2INT(rb_size);
  // Load our image
  FIBITMAP *image = get_instance_image(self);
  // Get dimensions
  int width = FreeImage_GetWidth(image), height = FreeImage_GetHeight(image);
  int left = 0, top = 0, right = width, bottom = height;
  int half = (width - height) / 2;
  
  if (width > height) {
    left = half;
    right = half + height;
  }
  
  if (height > width) {
    top = half;
    bottom = half + width;
  }
  
  // Crop the image
  FIBITMAP *cropped = FreeImage_Copy(image, left, top, right, bottom);
  // Resize the image
  FIBITMAP *thumbnail = FreeImage_MakeThumbnail(cropped, size, TRUE);
  // Create a new instance for Ruby
  VALUE instance = Data_Wrap_Struct(CLASS_OF(self), NULL, NULL, thumbnail);
  rb_iv_set(instance, "@file_type", rb_iv_get(self, "@file_type"));
   
   // If a block is given, yield to it, if not, return the instance
  if (rb_block_given_p()) {
    return rb_ensure(rb_yield, instance, rb_graffik_close, instance);
  } else {
    return instance;
  }
}
Example #2
0
HBITMAP BmpFilterLoadBitmap(BOOL *bIsTransparent, const wchar_t *ptszFilename)
{
	FIBITMAP *dib = (FIBITMAP*)Image_Load(ptszFilename, IMGL_RETURNDIB);
	if (dib == nullptr)
		return nullptr;

	FIBITMAP *dib32 = nullptr;
	if (FreeImage_GetBPP(dib) != 32) {
		dib32 = FreeImage_ConvertTo32Bits(dib);
		FreeImage_Unload(dib);
	}
	else dib32 = dib;

	if (dib32 == nullptr)
		return nullptr;

	if (FreeImage_IsTransparent(dib32))
		if (bIsTransparent)
			*bIsTransparent = TRUE;

	if (FreeImage_GetWidth(dib32) > 128 || FreeImage_GetHeight(dib32) > 128) {
		FIBITMAP *dib_new = FreeImage_MakeThumbnail(dib32, 128, FALSE);
		FreeImage_Unload(dib32);
		if (dib_new == nullptr)
			return nullptr;
		dib32 = dib_new;
	}

	HBITMAP bitmap = FreeImage_CreateHBITMAPFromDIB(dib32);
	FreeImage_Unload(dib32);
	FreeImage_CorrectBitmap32Alpha(bitmap, FALSE);
	return bitmap;
}
Example #3
0
VALUE rb_graffik_thumbnail(VALUE self, VALUE rb_size) {
  // Convert the Ruby numbers to C numbers
  int size = FIX2INT(rb_size);
  // Load our image
  FIBITMAP *image = get_instance_image(self);
  // Resize the image
  FIBITMAP *thumbnail = FreeImage_MakeThumbnail(image, size, TRUE);
  // Create a new instance for Ruby
  VALUE instance = Data_Wrap_Struct(CLASS_OF(self), NULL, NULL, thumbnail);
  rb_iv_set(instance, "@file_type", rb_iv_get(self, "@file_type"));
   
   // If a block is given, yield to it, if not, return the instance
  if (rb_block_given_p()) {
    return rb_ensure(rb_yield, instance, rb_graffik_close, instance);
  } else {
    return instance;
  }
}
Example #4
0
BOOL fipImage::makeThumbnail(WORD max_size, BOOL convert) {
	if(_dib) {
		switch(FreeImage_GetImageType(_dib)) {
			case FIT_BITMAP:
			case FIT_UINT16:
			case FIT_RGB16:
			case FIT_RGBA16:
			case FIT_FLOAT:
			case FIT_RGBF:
			case FIT_RGBAF:
				break;
			default:
				return FALSE;
				break;
		}

		// Perform downsampling
		FIBITMAP *dst = FreeImage_MakeThumbnail(_dib, max_size, convert);
		return replace(dst);
	}
	return FALSE;
}