ios - mis - Recepción de advertencia de memoria en iPad después de dibujar líneas en una imagen de gran tamaño con CGContextRef
porque las fotos de mi iphone no cargan (1)
Solo la imagen requerirá 54MB de memoria (3000 * 4500 * 4).
Como solo se puede mostrar una parte a la vez, considere dividir la imagen en varias secciones, como mosaicos de mapas, tal como se utiliza en Apple Maps.
Estoy dibujando líneas en UIImage usando CGContextRef.Mis imágenes tienen una resolución muy grande como 3000x4500. No me da una advertencia de memoria si dibujo una sola línea, pero si dibujo más de una línea, me da una advertencia de memoria y después que mi aplicación falla. Intenté liberar el objeto CGContextRef pero recibí un error. Mi código :
UIGraphicsBeginImageContext(imageView.image.size);
[imageView.image drawAtPoint:CGPointMake(0, 0)];
context2=UIGraphicsGetCurrentContext();
for(int i=0; i<kmtaObject.iTotalSize; i++)
{
kmtaGroup=&kmtaObject.KMTA_GROUP_OBJ[i];
//NSLog(@"Group # = %d",i);
for (int j=0; j<kmtaGroup->TotalLines; j++)
{
lineObject=&kmtaGroup->Line_INFO_OBJ[j];
// NSLog(@"Line # = %d",j);
// NSLog(@"*****************");
x0 = lineObject->x0;
y0= lineObject->y0;
x1= lineObject->x1;
y1= lineObject->y1;
color= lineObject->Color;
lineWidth= lineObject->LinkWidth;
lineColor=[self add_colorWithRGBAHexValue:color];
linearColor=lineColor;
// Brush width
CGContextSetLineWidth(context2, lineWidth);
// Line Color
CGContextSetStrokeColorWithColor(context2,[linearColor CGColor]);
CGContextMoveToPoint(context2, x0, y0);
CGContextAddLineToPoint(context2, x1, y1);
CGContextStrokePath(context2);
}
}
newImage=UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
imageView.image=newImage;