Getting RGB of a pixel in touchesMoved delegate -


i have created page picks rgb values of pixel. allows user move finger , choose pixel color of selected image. setting rgb hence obtained, small image view showing selection.

here piece of code.

- (void)touchesmoved:(nsset *)touches withevent:(uievent *)event {     uitouch *touch = [[event alltouches] anyobject];      // touch location     cgpoint touchlocation = [touch locationinview:touch.view];      // set touch location's center imageview     if (cgrectcontainspoint(imageviewcolorpicker.frame, touchlocation))     {         imageviewcolorpicker.center = touchlocation;          cgimageref image = [imageviewselectedimage.image cgimage];         nsuinteger width = cgimagegetwidth(image);         nsuinteger height = cgimagegetheight(image);          cgcolorspaceref colorspace = cgcolorspacecreatedevicergb();          unsigned char *rawdata = malloc(height * width * 4);         nsuinteger bytesperpixel = 4;         nsuinteger bytesperrow = bytesperpixel * width;         nsuinteger bitspercomponent = 8;          cgcontextref context = cgbitmapcontextcreate(rawdata, width, height, bitspercomponent, bytesperrow, colorspace, kcgimagealphapremultipliedlast | kcgbitmapbyteorder32big);         cgcolorspacerelease(colorspace);          cgcontextdrawimage(context, cgrectmake(0, 0, width, height),image);         cgcontextrelease(context);          int byteindex = (bytesperrow * (int)touchlocation.y) + (int)touchlocation.x * bytesperpixel;         red = rawdata[byteindex];         green = rawdata[byteindex + 1];         blue = rawdata[byteindex + 2];         alpha = rawdata[byteindex + 3];           imgpixelcolor.backgroundcolor=[uicolor colorwithred:red/255.0 green:green/255.0 blue:blue/255.0 alpha:alpha];     } } 

it solving problem. issue crashes during finger move showing received memory warning message 3 times in log window.

am doing wrong? there other way rgb's solve kind of problem? library if available ?

quick appreciated.

you're mallocing pixel buffer graphics context (rawdata), never free it, you're leaking copy of entire image, every time touch moves (this can lot of memory pretty quickly).

add @ end of if-statement.

free(rawdata); 

btw, may want consider creating bitmap context once , reusing it. it's pretty wasteful redraw image every time touch moves, if stays same anyway.


Comments

Popular posts from this blog

java - Run spring boot application error: Cannot instantiate interface org.springframework.context.ApplicationListener -

reactjs - React router and this.props.children - how to pass state to this.props.children -

Excel VBA "Microsoft Windows Common Controls 6.0 (SP6)" Location Changes -