Я создал страницу, которая выбирает значения RGB для пикселя. Он позволяет пользователю перемещать палец и выбирать цвет пикселя выбранного изображения. Также установив таким образом RGB, на небольшое изображение, показывающее его выбор.Получение RGB пикселя в touchhesMoved delegate
Вот фрагмент кода.
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
UITouch *touch = [[event allTouches] anyObject];
// Get Touch location
CGPoint touchLocation = [touch locationInView:touch.view];
// Set touch location's center to 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];
}
}
Это решение моей проблемы. Но проблема в том, что он иногда падает во время движения пальца, показывая Received Memory Warning
сообщение 3 раза в окне журнала.
Я что-то не так? Есть ли другой способ заставить RGB решить эту проблему? Любая библиотека, если она доступна?
Краткая справка приветствуется.
Спасибо man..freeing (rawData) помогли избежать краха. Однако, пожалуйста, уточните, как использовать контекст. Я делаю это так, который я предполагаю, что неправильный путь: (! Контекст) если { контекст = CGBitmapContextCreate (RAWDATA, ширина, высота, bitsPerComponent, bytesPerRow, COLORSPACE, kCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32Big);} CGColorSpaceRelease (COLORSPACE) ; CGContextDrawImage (контекст, CGRectMake (0, 0, ширина, высота), изображение); CGContextRelease (контекст); Кроме того, поскольку я рисую изображение снова и снова, движущееся изображение для выбора цвета работает очень медленно. Просьба предложить, – Sourabh