J'effectue la luminosité sur UIImage avec le code src suivant. Lorsque je vérifie ce code avec Instrument, la fuite de mémoire est de 1 Mo pour chaque appel de luminosité. Je change de luminosité avec le curseur. après le débogage appris à connaîtreLuminosité sans appel OpenGL
CFDataRef dataref=CGDataProviderCopyData(CGImageGetDataProvider(aInputImage.CGImage));
est de prendre une mémoire, quelqu'un peut me aider à optimiser ce code.
// ## Brightness without Open GL call
CGImageRef Brightness(UIImage* aInputImage, float aFactor)
{
CGImageRef img=aInputImage.CGImage;
CFDataRef dataref=CGDataProviderCopyData(CGImageGetDataProvider(aInputImage.CGImage));
UInt8 *data=(UInt8 *)CFDataGetBytePtr(dataref);
int length=CFDataGetLength(dataref);
// Perform operation on pixels
for(int index=0;index<length;index+=4)
{
// Go For BRIGHTNESS
for(int i=0;i<3;i++)
{
if(data[index+i]+aFactor<0)
{
data[index+i]=0;
}
else
{
if(data[index+i]+aFactor>255)
{
data[index+i]=255;
}
else
{
data[index+i]+=aFactor;
}
}
}
}
// .. Take image attributes
size_t width=CGImageGetWidth(img);
size_t height=CGImageGetHeight(img);
size_t bitsPerComponent=CGImageGetBitsPerComponent(img);
size_t bitsPerPixel=CGImageGetBitsPerPixel(img);
size_t bytesPerRow=CGImageGetBytesPerRow(img);
// .. Do the pixel manupulation
CGColorSpaceRef colorspace=CGImageGetColorSpace(img);
CGBitmapInfo bitmapInfo=CGImageGetBitmapInfo(img);
CFDataRef newData=CFDataCreate(NULL,data,length);
CGDataProviderRef provider=CGDataProviderCreateWithCFData(newData);
// .. Get the Image out of this raw data
CGImageRef newImg=CGImageCreate(width,height,bitsPerComponent,bitsPerPixel,bytesPerRow,colorspace,bitmapInfo,provider,NULL,true,kCGRenderingIntentDefault);
// .. Prepare the image from raw data
UIImage* rawImage = [[UIImage alloc] initWithCGImage:newImg];
// .. done with all,so release the references
CGImageRelease(newImg);
CGDataProviderRelease(provider);
CFRelease(dataref);
return rawImage.CGImage;
}
Merci,
Sagar
Merci DarkDust. il a résolu le problème avec votre suggestion. –