iphone - BAD_ACCESS when trying to free data when UIView to UIImage -
iphone - BAD_ACCESS when trying to free data when UIView to UIImage -
i intended take snapshot of uiview
drawed opengl es
uiimage
, here code used:
if(context){ [eaglcontext setcurrentcontext:context]; glbindframebuffer(gl_framebuffer, defaultframebuffer); nsinteger datalength = framebufferwidth * framebufferheight * 4; glubyte* info = (glubyte*)malloc(datalength) ; // malloc(mydatalength); glreadpixels(0, 0, framebufferwidth, framebufferheight, gl_rgba, gl_unsigned_byte, data); // create info provider data. cgdataproviderref provider = cgdataprovidercreatewithdata(null, data, datalength, null); // prep ingredients int bitspercomponent = 8; int bitsperpixel = 32; int bytesperrow = 4 * framebufferwidth; cgcolorspaceref colorspaceref = cgcolorspacecreatedevicergb(); cgbitmapinfo bitmapinfo = kcgbitmapbyteorderdefault; cgcolorrenderingintent renderingintent = kcgrenderingintentdefault; // create cgimage cgimageref result = cgimagecreate(framebufferwidth, framebufferheight, bitspercomponent, bitsperpixel, bytesperrow, colorspaceref, bitmapinfo, provider, null, no, renderingintent); // create uiimage uiimage *image = [uiimage imagewithcgimage:result]; cgimagerelease(result); cgcolorspacerelease(colorspaceref); cgdataproviderrelease(provider); //free(data); homecoming image; }
i intended utilize free(data);
before return
, raises bad_access
runtime error.
so questions is, how free
properly? or should free
them after image releases?
you should utilize cgdataprovidercreatewithdata's
cgdataproviderreleasedatacallback
described here.
simply add together freedata function callback:
void freedata(void *info, const void *data, size_t size) { free((void*)data); }
and pass cgdataprovidercreatewithdata
:
cgdataproviderref provider = cgdataprovidercreatewithdata(null, data, datalength, freedata);
iphone objective-c opengl-es uiimage cgimage
Comments
Post a Comment