2010-12-05 2 views
0

iPhone에서 그림의 픽셀을 읽고 편집하는 방법이 궁금합니다. 색상이있는 점 배열을 사용하는 것이 좋습니다.iPhone에서 이미지의 픽셀 읽기 및 편집

CGPoint가 그림의 "갈색"지점과 교차하는 경우 반경의 모든 갈색 픽셀의 색상을 흰색으로 설정합니다. 앞으로 더 많은 질문이 있지만 시작에 불과합니다.

건배

답변

1

화상 데이터가 정확하게 그와 같이 사용할 수 - 화소의 2 차원 어레이는, 각 픽셀은 32 비트 정수로 표시된다. 각 색상 구성 요소 (빨간색, 녹색, 파란색 및 알파)에는 8 비트 값이 있습니다. 32 비트 정수 내에서 이러한 8 비트 폭 값의 순서는 그림 데이터의 형식에 따라 다릅니다. 이것에 관한 사과 문서는 정말 좋습니다. CGDataProviderCopyData를 사용하여 UIImage의 실제 데이터 저장소에 대한 포인터를 제공하는 매력적인 Apple 제품이 있지만 실제로는 내부 저장소의 형식이 이미지마다 크게 다를 수 있으므로 두통이 될 수 있습니다. 실제로 이미지 처리를하는 대부분의 사람들은이 접근 방식을 사용하는 것 같습니다.

CGImageRef image = [UIImage 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)); 
    CGContextRelease(context); 

    // rawData contains image data in the RGBA8888 format. 

    // for any pixel at coordinate x,y -- the value is 
    // 

    int pixelIndex = (bytesPerRow * y) + x * bytesPerPixel; 
    unsigned char red = rawData[pixelIndex]; 
    green = rawData[pixelIndex + 1]; 
    blue = rawData[pixelIndex + 2]; 
    alpha = rawData[pixelIndex + 3]; 
+0

대단한 대답입니다! 이 이미지를 실시간으로 저장/읽는 것이 얼마나 효율적입니까? 제가 변화를 할 때마다 깃발을 세우면 모든 진드기가 아닐 것입니다. – quantumpotato

+1

꽤 효율적입니다. 끊임없이 변화를 일으키더라도 30fps로 접근 할 수 있습니다 ... –

+0

고마워! 이것을 시험해보기를 고대합니다. – quantumpotato