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