Module: IL
- Included in:
- Devil
- Defined in:
- ext/devil/ruby_il.c
Defined Under Namespace
Classes: ImageData
Constant Summary collapse
- TYPE_UNKNOWN =
////////////////////////////////
INT2NUM(IL_TYPE_UNKNOWN)
- BMP =
INT2NUM(IL_BMP)
- CUT =
INT2NUM(IL_CUT)
- DOOM =
INT2NUM(IL_DOOM)
- DOOM_FLAT =
INT2NUM(IL_DOOM_FLAT)
- ICO =
INT2NUM(IL_ICO)
- JPG =
INT2NUM(IL_JPG)
- JFIF =
INT2NUM(IL_JFIF)
- LBM =
INT2NUM(IL_LBM)
- PCD =
INT2NUM(IL_PCD)
- PCX =
INT2NUM(IL_PCX)
- PIC =
INT2NUM(IL_PIC)
- PNG =
INT2NUM(IL_PNG)
- PNM =
INT2NUM(IL_PNM)
- SGI =
INT2NUM(IL_SGI)
- TGA =
INT2NUM(IL_TGA)
- TIF =
INT2NUM(IL_TIF)
- CHEAD =
INT2NUM(IL_CHEAD)
- RAW =
INT2NUM(IL_RAW)
- MDL =
INT2NUM(IL_MDL)
- WAL =
INT2NUM(IL_WAL)
- LIF =
INT2NUM(IL_LIF)
- MNG =
INT2NUM(IL_MNG)
- JNG =
INT2NUM(IL_JNG)
- GIF =
INT2NUM(IL_GIF)
- DDS =
INT2NUM(IL_DDS)
- DCX =
INT2NUM(IL_DCX)
- PSD =
INT2NUM(IL_PSD)
- EXIF =
INT2NUM(IL_EXIF)
- PSP =
INT2NUM(IL_PSP)
- PIX =
INT2NUM(IL_PIX)
- PXR =
INT2NUM(IL_PXR)
- XPM =
INT2NUM(IL_XPM)
- HDR =
INT2NUM(IL_HDR)
- JASC_PAL =
INT2NUM(IL_JASC_PAL)
- COLOUR_INDEX =
INT2NUM(IL_COLOUR_INDEX)
- COLOR_INDEX =
INT2NUM(IL_COLOR_INDEX)
- RGB =
INT2NUM(IL_RGB)
- RGBA =
INT2NUM(IL_RGBA)
- BGR =
INT2NUM(IL_BGR)
- BGRA =
INT2NUM(IL_BGRA)
- LUMINANCE =
INT2NUM(IL_LUMINANCE)
- LUMINANCE_ALPHA =
INT2NUM(IL_LUMINANCE_ALPHA)
- UNSIGNED_BYTE =
INT2NUM(IL_UNSIGNED_BYTE)
- SHORT =
INT2NUM(IL_SHORT)
- UNSIGNED_SHORT =
INT2NUM(IL_UNSIGNED_SHORT)
- INT =
INT2NUM(IL_INT)
- UNSIGNED_INT =
INT2NUM(IL_UNSIGNED_INT)
- FLOAT =
INT2NUM(IL_FLOAT)
- DOUBLE =
INT2NUM(IL_DOUBLE)
- NO_ERROR =
INT2NUM(IL_NO_ERROR)
- INVALID_ENUM =
INT2NUM(IL_INVALID_ENUM)
- OUT_OF_MEMORY =
INT2NUM(IL_OUT_OF_MEMORY)
- FORMAT_NOT_SUPPORTED =
INT2NUM(IL_FORMAT_NOT_SUPPORTED)
- INTERNAL_ERROR =
INT2NUM(IL_INTERNAL_ERROR)
- INVALID_VALUE =
INT2NUM(IL_INVALID_VALUE)
- ILLEGAL_OPERATION =
INT2NUM(IL_ILLEGAL_OPERATION)
- ILLEGAL_FILE_VALUE =
INT2NUM(IL_ILLEGAL_FILE_VALUE)
- INVALID_FILE_HEADER =
INT2NUM(IL_INVALID_FILE_HEADER)
- INVALID_PARAM =
INT2NUM(IL_INVALID_PARAM)
- COULD_NOT_OPEN_FILE =
INT2NUM(IL_COULD_NOT_OPEN_FILE)
- INVALID_EXTENSION =
INT2NUM(IL_INVALID_EXTENSION)
- FILE_ALREADY_EXISTS =
INT2NUM(IL_FILE_ALREADY_EXISTS)
- OUT_FORMAT_SAME =
INT2NUM(IL_OUT_FORMAT_SAME)
- STACK_OVERFLOW =
INT2NUM(IL_STACK_OVERFLOW)
- STACK_UNDERFLOW =
INT2NUM(IL_STACK_UNDERFLOW)
- INVALID_CONVERSION =
INT2NUM(IL_INVALID_CONVERSION)
- BAD_DIMENSIONS =
INT2NUM(IL_BAD_DIMENSIONS)
- FILE_READ_ERROR =
INT2NUM(IL_FILE_READ_ERROR)
- FILE_WRITE_ERROR =
INT2NUM(IL_FILE_WRITE_ERROR)
- LIB_GIF_ERROR =
INT2NUM(IL_LIB_GIF_ERROR)
- LIB_JPEG_ERROR =
INT2NUM(IL_LIB_JPEG_ERROR)
- LIB_PNG_ERROR =
INT2NUM(IL_LIB_PNG_ERROR)
- LIB_TIFF_ERROR =
INT2NUM(IL_LIB_TIFF_ERROR)
- LIB_MNG_ERROR =
INT2NUM(IL_LIB_MNG_ERROR)
- UNKNOWN_ERROR =
INT2NUM(IL_UNKNOWN_ERROR)
- IMAGE_DEPTH =
CONSTANTS BELOW ADDED BY BANISTERFIEND
INT2NUM(IL_IMAGE_DEPTH)
- IMAGE_WIDTH =
INT2NUM(IL_IMAGE_WIDTH)
- IMAGE_HEIGHT =
INT2NUM(IL_IMAGE_HEIGHT)
- IMAGE_FORMAT =
INT2NUM(IL_IMAGE_FORMAT)
- IMAGE_BITS_PER_PIXEL =
INT2NUM(IL_IMAGE_BITS_PER_PIXEL)
- IMAGE_BYTES_PER_PIXEL =
INT2NUM(IL_IMAGE_BYTES_PER_PIXEL)
- FILE_OVERWRITE =
INT2NUM(IL_FILE_OVERWRITE)
- ORIGIN_SET =
INT2NUM(IL_ORIGIN_SET)
- CONV_PAL =
INT2NUM(IL_CONV_PAL)
- CUR_IMAGE =
INT2NUM(IL_CUR_IMAGE)
- ORIGIN_LOWER_LEFT =
INT2NUM(IL_ORIGIN_LOWER_LEFT)
- ORIGIN_UPPER_LEFT =
INT2NUM(IL_ORIGIN_UPPER_LEFT)
- JPG_QUALITY =
INT2NUM(IL_JPG_QUALITY)
Class Method Summary collapse
- .ActiveImage(rb_Number) ⇒ Object
- .ActiveMipmap(rb_Number) ⇒ Object
- .ApplyProfile(rb_inprofile, rb_outprofile) ⇒ Object
- .BindImage(image) ⇒ Object
- .Blit(rb_Source, rb_DestX, rb_DestY, rb_DestZ, rb_SrcX, rb_SrcY, rb_SrcZ, rb_Width, rb_Height, rb_Depth) ⇒ Object
- .ClearColour(rb_red, rb_green, rb_blue, rb_alpha) ⇒ Object
- .ClearImage ⇒ Object
- .CloneCurImage ⇒ Object
- .ConvertImage(rb_destformat, rb_desttype) ⇒ Object
- .CopyImage(rb_Src) ⇒ Object
- .DeleteImages(images) ⇒ Object
- .Disable(rb_mode) ⇒ Object
-
.Enable(rb_mode) ⇒ Object
methods below added by banisterfiend.
- .FromBlob(blob, rb_width, rb_height) ⇒ Object
- .GenImages(num_names) ⇒ Object
- .GetData ⇒ Object
- .GetError ⇒ Object
- .GetInteger(rb_mode) ⇒ Object
-
.Init ⇒ Object
////////////////////////////////.
- .Load(rb_type, rb_filename) ⇒ Object
- .LoadImage(rb_filename) ⇒ Object
- .OriginFunc(rb_mode) ⇒ Object
- .OverlayImage(rb_Source, rb_XCoord, rb_YCoord, rb_ZCoord) ⇒ Object
- .Save(rb_type, rb_filename) ⇒ Object
- .SaveImage(rb_filename) ⇒ Object
-
.SetData(rb_Data) ⇒ Object
}.
- .SetInteger(rb_mode, rb_param) ⇒ Object
- .SetPixels(rb_XOff, rb_YOff, rb_ZOff, rb_Width, rb_Height, rb_Depth, rb_Format, rb_Type, rb_data) ⇒ Object
- .TexImage(rb_width, rb_height, rb_depth, rb_bpp, rb_format, rb_type, rb_data) ⇒ Object
-
.ToBlob ⇒ Object
this function is not actually in the DevIL API, but im adding it here for convenience.
Class Method Details
.ActiveImage(rb_Number) ⇒ Object
237 238 239 240 241 |
# File 'ext/devil/ruby_il.c', line 237
static VALUE il_ActiveImage(VALUE obj, VALUE rb_Number){
ILuint Number = NUM2INT(rb_Number);
ILboolean flag = ilActiveImage(Number);
return flag ? Qtrue : Qfalse;
}
|
.ActiveMipmap(rb_Number) ⇒ Object
231 232 233 234 235 |
# File 'ext/devil/ruby_il.c', line 231
static VALUE il_ActiveMipmap(VALUE obj, VALUE rb_Number) {
ILuint Number = NUM2INT(rb_Number);
ILboolean flag = ilActiveMipmap(Number);
return flag ? Qtrue : Qfalse;
}
|
.ApplyProfile(rb_inprofile, rb_outprofile) ⇒ Object
258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 |
# File 'ext/devil/ruby_il.c', line 258
static VALUE il_ApplyProfile(VALUE obj, VALUE rb_inprofile, VALUE rb_outprofile)
{
char * inprofile = NULL;
char * outprofile = StringValuePtr(rb_outprofile);
ILboolean flag;
if(NIL_P(rb_inprofile))
inprofile = NULL;
else
inprofile = StringValuePtr(rb_inprofile);
flag = ilApplyProfile(inprofile, outprofile);
return flag ? Qtrue : Qfalse;
}
|
.BindImage(image) ⇒ Object
51 52 53 54 55 |
# File 'ext/devil/ruby_il.c', line 51
static VALUE il_BindImage(VALUE obj, VALUE image) {
ILuint u_image = NUM2INT(image);
ilBindImage(u_image);
return Qnil;
}
|
.Blit(rb_Source, rb_DestX, rb_DestY, rb_DestZ, rb_SrcX, rb_SrcY, rb_SrcZ, rb_Width, rb_Height, rb_Depth) ⇒ Object
207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 |
# File 'ext/devil/ruby_il.c', line 207
static VALUE il_Blit(VALUE obj, VALUE rb_Source, VALUE rb_DestX, VALUE
rb_DestY, VALUE rb_DestZ, VALUE rb_SrcX, VALUE rb_SrcY, VALUE
rb_SrcZ, VALUE rb_Width, VALUE rb_Height, VALUE rb_Depth) {
ILuint Source = NUM2INT(rb_Source);
ILint DestX = NUM2INT(rb_DestX);
ILint DestY = NUM2INT(rb_DestY);
ILint DestZ = NUM2INT(rb_DestZ);
ILint SrcX = NUM2INT(rb_SrcX);
ILint SrcY = NUM2INT(rb_SrcY);
ILint SrcZ = NUM2INT(rb_SrcZ);
ILuint Width = NUM2INT(rb_Width);
ILuint Height = NUM2INT(rb_Height);
ILuint Depth = NUM2INT(rb_Depth);
ILboolean flag = ilBlit(Source, DestX,DestY, DestZ,SrcX, SrcY, SrcZ,
Width,Height,Depth);
return flag ? Qtrue : Qfalse;
}
|
.ClearColour(rb_red, rb_green, rb_blue, rb_alpha) ⇒ Object
362 363 364 365 366 367 368 369 370 371 372 |
# File 'ext/devil/ruby_il.c', line 362
static VALUE il_ClearColour(VALUE obj, VALUE rb_red, VALUE rb_green, VALUE rb_blue, VALUE rb_alpha)
{
ILubyte red = NUM2INT(rb_red);
ILubyte green = NUM2INT(rb_green);
ILubyte blue = NUM2INT(rb_blue);
ILubyte alpha = NUM2INT(rb_alpha);
ilClearColour(red, green, blue, alpha);
return Qnil;
}
|
.ClearImage ⇒ Object
374 375 376 377 378 |
# File 'ext/devil/ruby_il.c', line 374
static VALUE il_ClearImage(VALUE obj)
{
ILboolean flag = ilClearImage();
return flag ? Qtrue : Qfalse;
}
|
.CloneCurImage ⇒ Object
347 348 349 350 351 352 |
# File 'ext/devil/ruby_il.c', line 347
static VALUE il_CloneCurImage(VALUE obj)
{
ILuint clone = ilCloneCurImage();
return INT2NUM(clone);
}
|
.ConvertImage(rb_destformat, rb_desttype) ⇒ Object
281 282 283 284 285 286 287 288 |
# File 'ext/devil/ruby_il.c', line 281
static VALUE il_ConvertImage(VALUE obj, VALUE rb_destformat, VALUE rb_desttype)
{
ILenum destformat = NUM2INT(rb_destformat);
ILenum desttype = NUM2INT(rb_desttype);
ILboolean flag = ilConvertImage(destformat, desttype);
return flag ? Qtrue : Qfalse;
}
|
.CopyImage(rb_Src) ⇒ Object
189 190 191 192 193 |
# File 'ext/devil/ruby_il.c', line 189
static VALUE il_CopyImage(VALUE obj, VALUE rb_Src){
ILuint Src = NUM2INT(rb_Src);
ILboolean flag = ilCopyImage(Src);
return flag ? Qtrue : Qfalse;
}
|
.DeleteImages(images) ⇒ Object
57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 |
# File 'ext/devil/ruby_il.c', line 57
static VALUE il_DeleteImages(VALUE obj, VALUE images) {
ILsizei num;
ILuint* u_images;
RArray* ary;
VALUE entry;
int i = 0;
if(TYPE(images) != T_ARRAY)
rb_raise(rb_eTypeError, "type mismatch:%s", rb_class2name(images));
ary = RARRAY(images);
num = RARRAY_LEN(images);
u_images = ALLOC_N(ILuint, num);
for(i = 0; i < num; ++i) {
entry = rb_ary_entry((VALUE)ary, i);
u_images[i] = NUM2INT(entry);
}
ilDeleteImages(num, u_images);
free(u_images);
return Qnil;
}
|
.Disable(rb_mode) ⇒ Object
251 252 253 254 255 256 |
# File 'ext/devil/ruby_il.c', line 251
static VALUE il_Disable(VALUE obj, VALUE rb_mode) {
ILenum mode = NUM2INT(rb_mode);
ILboolean flag = ilDisable(mode);
return flag ? Qtrue : Qfalse;
}
|
.Enable(rb_mode) ⇒ Object
methods below added by banisterfiend
244 245 246 247 248 249 |
# File 'ext/devil/ruby_il.c', line 244
static VALUE il_Enable(VALUE obj, VALUE rb_mode) {
ILenum mode = NUM2INT(rb_mode);
ILboolean flag = ilEnable(mode);
return flag ? Qtrue : Qfalse;
}
|
.FromBlob(blob, rb_width, rb_height) ⇒ Object
323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 |
# File 'ext/devil/ruby_il.c', line 323
static VALUE bf_FromBlob(VALUE obj, VALUE blob, VALUE rb_width, VALUE rb_height)
{
ILubyte * data;
ILuint width, height;
ILuint image;
ILuint saved_image;
width = NUM2INT(rb_width);
height = NUM2INT(rb_height);
data = (ILubyte *) RSTRING_PTR(blob);
saved_image = ilGetInteger(IL_CUR_IMAGE);
ilGenImages(1, &image);
ilBindImage(image);
ilTexImage(width, height, 1, 4, IL_RGBA, IL_UNSIGNED_BYTE, data);
ilBindImage(saved_image);
return INT2NUM(image);
}
|
.GenImages(num_names) ⇒ Object
32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
# File 'ext/devil/ruby_il.c', line 32
static VALUE il_GenImages(VALUE obj, VALUE num_names) {
ILsizei num = NUM2INT(num_names);
ILuint* names = ALLOC_N(ILuint, num);
RArray* ret;
int i;
if (!names)
rb_raise(rb_eRuntimeError, "IL.GenImages memory allocation");
ilGenImages(num, names);
ret = RARRAY( rb_ary_new2(num));
for(i = 0; i < num; ++i)
rb_ary_push( (VALUE)ret, INT2NUM(names[i]));
free(names);
return (VALUE)ret;
}
|
.GetData ⇒ Object
135 136 137 138 |
# File 'ext/devil/ruby_il.c', line 135 static VALUE il_GetData(VALUE obj) { ILubyte* data = ilGetData(); return MakeImageData(data); } |
.GetError ⇒ Object
226 227 228 229 |
# File 'ext/devil/ruby_il.c', line 226 static VALUE il_GetError(VALUE obj) { ILenum num = ilGetError(); return INT2FIX(num); } |
.GetInteger(rb_mode) ⇒ Object
274 275 276 277 278 279 |
# File 'ext/devil/ruby_il.c', line 274
static VALUE il_GetInteger(VALUE obj, VALUE rb_mode) {
ILenum mode = NUM2INT(rb_mode);
ILint result = ilGetInteger(mode);
return INT2NUM(result);
}
|
.Init ⇒ Object
////////////////////////////////
27 28 29 30 |
# File 'ext/devil/ruby_il.c', line 27 static VALUE il_Init(VALUE obj) { ilInit(); return Qnil; } |
.Load(rb_type, rb_filename) ⇒ Object
88 89 90 91 92 93 94 |
# File 'ext/devil/ruby_il.c', line 88
static VALUE il_Load(VALUE obj, VALUE rb_type, VALUE rb_filename) {
ILenum type = NUM2INT(rb_type);
char* filename = StringValuePtr(rb_filename);
ILboolean load = ilLoad(type, filename);
return load ? Qtrue : Qfalse;
}
|
.LoadImage(rb_filename) ⇒ Object
82 83 84 85 86 |
# File 'ext/devil/ruby_il.c', line 82
static VALUE il_LoadImage(VALUE obj, VALUE rb_filename) {
char* filename = StringValuePtr(rb_filename);
ILboolean load = ilLoadImage(filename);
return load ? Qtrue : Qfalse;
}
|
.OriginFunc(rb_mode) ⇒ Object
354 355 356 357 358 359 360 |
# File 'ext/devil/ruby_il.c', line 354
static VALUE il_OriginFunc(VALUE obj, VALUE rb_mode)
{
ILenum mode = NUM2INT(rb_mode);
ILboolean flag = ilOriginFunc(mode);
return flag ? Qtrue : Qfalse;
}
|
.OverlayImage(rb_Source, rb_XCoord, rb_YCoord, rb_ZCoord) ⇒ Object
195 196 197 198 199 200 201 202 203 204 |
# File 'ext/devil/ruby_il.c', line 195
static VALUE il_OverlayImage(VALUE obj, VALUE rb_Source, VALUE rb_XCoord,
VALUE rb_YCoord, VALUE rb_ZCoord) {
ILuint Source = NUM2INT(rb_Source);
ILint XCoord = NUM2INT(rb_XCoord);
ILint YCoord = NUM2INT(rb_YCoord);
ILint ZCoord = NUM2INT(rb_ZCoord);
ILboolean flag = ilOverlayImage(Source, XCoord, YCoord,ZCoord);
return flag ? Qtrue : Qfalse;
}
|
.Save(rb_type, rb_filename) ⇒ Object
103 104 105 106 107 108 109 |
# File 'ext/devil/ruby_il.c', line 103
static VALUE il_Save(VALUE obj, VALUE rb_type, VALUE rb_filename) {
ILenum type = NUM2INT(rb_type);
char* filename = StringValuePtr(rb_filename);
ILboolean load = ilSave(type, filename);
return load ? Qtrue : Qfalse;
}
|
.SaveImage(rb_filename) ⇒ Object
96 97 98 99 100 101 |
# File 'ext/devil/ruby_il.c', line 96
static VALUE il_SaveImage(VALUE obj, VALUE rb_filename) {
char* filename = StringValuePtr(rb_filename);
ILboolean load = ilSaveImage(filename);
return load ? Qtrue : Qfalse;
}
|
.SetData(rb_Data) ⇒ Object
}
163 164 165 166 167 168 |
# File 'ext/devil/ruby_il.c', line 163
static VALUE il_SetData(VALUE obj, VALUE rb_Data) {
/* ILvoid */
void* data = ImageData2Arr(rb_Data);
ILboolean flag = ilSetData(data);
return flag ? Qtrue : Qfalse;
}
|
.SetInteger(rb_mode, rb_param) ⇒ Object
380 381 382 383 384 385 386 387 388 |
# File 'ext/devil/ruby_il.c', line 380
static VALUE il_SetInteger(VALUE obj, VALUE rb_mode, VALUE rb_param)
{
ILenum mode = NUM2INT(rb_mode);
ILint param = NUM2INT(rb_param);
ilSetInteger(mode, param);
return Qnil;
}
|
.SetPixels(rb_XOff, rb_YOff, rb_ZOff, rb_Width, rb_Height, rb_Depth, rb_Format, rb_Type, rb_data) ⇒ Object
170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 |
# File 'ext/devil/ruby_il.c', line 170
static VALUE il_SetPixels(VALUE obj, VALUE rb_XOff, VALUE rb_YOff, VALUE rb_ZOff,
VALUE rb_Width, VALUE rb_Height, VALUE rb_Depth, VALUE rb_Format,
VALUE rb_Type, VALUE rb_data) {
ILuint XOff = NUM2INT(rb_XOff);
ILuint YOff = NUM2INT(rb_YOff);
ILuint ZOff = NUM2INT(rb_ZOff);
ILuint Width = NUM2INT(rb_Width);
ILuint Height = NUM2INT(rb_Height);
ILuint Depth = NUM2INT(rb_Depth);
ILenum Format = NUM2INT(rb_Format);
ILenum Type = NUM2INT(rb_Type);
/* ILvoid */
void* data = ImageData2Arr(rb_data);
ilSetPixels(XOff, YOff, ZOff, Width, Height, Depth, Format, Type, data);
return Qnil;
}
|
.TexImage(rb_width, rb_height, rb_depth, rb_bpp, rb_format, rb_type, rb_data) ⇒ Object
111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 |
# File 'ext/devil/ruby_il.c', line 111
static VALUE il_TexImage(VALUE obj, VALUE rb_width, VALUE rb_height,
VALUE rb_depth, VALUE rb_bpp, VALUE rb_format, VALUE rb_type,
VALUE rb_data) {
ILuint width = NUM2INT(rb_width);
ILuint height = NUM2INT(rb_height);
ILuint depth = NUM2INT(rb_depth);
ILubyte bpp = NUM2INT(rb_bpp);
ILenum format = NUM2INT(rb_format);
ILenum type = NUM2INT(rb_type);
ILboolean flag;
/* from ILvoid */
void * data = NULL;
if(NIL_P(rb_data))
data = NULL;
else
data = ImageData2Arr(rb_data);
flag = ilTexImage(width, height, depth,
bpp, format, type, data);
return flag ? Qtrue : Qfalse;
}
|
.ToBlob ⇒ Object
this function is not actually in the DevIL API, but im adding it here for convenience
292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 |
# File 'ext/devil/ruby_il.c', line 292
static VALUE bf_ToBlob(VALUE obj)
{
ILuint width, height, saved_image, copy_image;
char * img_ptr;
VALUE blob;
saved_image = ilGetInteger(IL_CUR_IMAGE);
/* make a copy of the current image */
copy_image = ilCloneCurImage();
ilBindImage(copy_image);
/* ensure the image is int RGBA UNSIGNED_BYTE format for blob */
ilConvertImage(IL_RGBA, IL_UNSIGNED_BYTE);
width = ilGetInteger(IL_IMAGE_WIDTH);
height = ilGetInteger(IL_IMAGE_HEIGHT);
img_ptr = (char *)ilGetData();
blob = rb_str_new(img_ptr, 4 * width * height);
/* restore saved binding */
ilBindImage(saved_image);
ilDeleteImages(1, ©_image);
return blob;
}
|