簡體   English   中英

如何在iPhone上讀取RGB像素數據

[英]How to read RGB pixel data on iPhone

我想知道如何在iPhone上掃描圖像並分析每個像素的RGB值,從而最終確定整個圖像的平均RGB。 如果有人能夠向正確的方向推動我,將不勝感激。 我是圖像分析的新手,不確定從哪里開始,或者iOS 5 API中是否包含類似內容。

只需粘貼,我就可以檢測到觸摸的顏色。

- (void) touchesEnded:(NSSet*)touches withEvent:(UIEvent*)event {

if (self.view.hidden==YES) {
    //color wheel is hidden, so don't handle  this as a color wheel event.
    [[self nextResponder] touchesEnded:touches withEvent:event];
    return;
}

UITouch* touch = [touches anyObject];
CGPoint point = [touch locationInView:self.view]; //where image was tapped
UIColor * lastColor = [self getPixelColorAtLocation:point];
NSLog(@"color %@",lastColor);
UIImageView *lbl=[[UIImageView alloc]initWithFrame:CGRectMake(0, 0, 100, 100)];
lbl.layer.cornerRadius=50;
[imageView addSubview:lbl];
lbl.backgroundColor=lastColor;
lbl.center=CGPointMake(stillImageFilter.center.x*320, (stillImageFilter.center.y*320)-125);
NSLog(@"stillImageCenter = %f,%f",stillImageFilter.center.x,stillImageFilter.center.y);}

- (UIColor*) getPixelColorAtLocation:(CGPoint)point {
UIColor* color = nil;
CGImageRef inImage = imageView.image.CGImage;

CGContextRef cgctx = [self createARGBBitmapContextFromImage:inImage];
if (cgctx == NULL) { return nil; /* error */ }

size_t w = CGImageGetWidth(inImage);
size_t h = CGImageGetHeight(inImage);
CGRect rect = {{0,0},{w,h}};


CGContextDrawImage(cgctx, rect, inImage);


unsigned char* data = CGBitmapContextGetData (cgctx);
if (data != NULL) {

    int offset = 4*((w*round(point.y))+round(point.x));
    int alpha =  data[offset];
    int red = data[offset+1];
    int green = data[offset+2];
    int blue = data[offset+3];
    NSLog(@"offset: %i colors: RGB A %i %i %i  %i",offset,red,green,blue,alpha);
    color = [UIColor colorWithRed:(red/255.0f) green:(green/255.0f) blue:(blue/255.0f) alpha:(alpha/255.0f)];
}


CGContextRelease(cgctx);

if (data) { free(data); }

return color;

}

- (CGContextRef) createARGBBitmapContextFromImage:(CGImageRef) inImage {

CGContextRef    context = NULL;
CGColorSpaceRef colorSpace;
void *          bitmapData;
int             bitmapByteCount;
int             bitmapBytesPerRow;


size_t pixelsWide = CGImageGetWidth(inImage);
size_t pixelsHigh = CGImageGetHeight(inImage);


bitmapBytesPerRow   = (pixelsWide * 4);
bitmapByteCount     = (bitmapBytesPerRow * pixelsHigh);


colorSpace = CGColorSpaceCreateDeviceRGB();

if (colorSpace == NULL)
{
    fprintf(stderr, "Error allocating color space\n");
    return NULL;
}


bitmapData = malloc( bitmapByteCount );
if (bitmapData == NULL)
{
    fprintf (stderr, "Memory not allocated!");
    CGColorSpaceRelease( colorSpace );
    return NULL;
}


context = CGBitmapContextCreate (bitmapData,
                                 pixelsWide,
                                 pixelsHigh,
                                 8,      // bits per component
                                 bitmapBytesPerRow,
                                 colorSpace,
                                 kCGImageAlphaPremultipliedFirst);
if (context == NULL)
{
    free (bitmapData);
    fprintf (stderr, "Context not created!");
}


CGColorSpaceRelease( colorSpace );

return context;

}

查看iOS的相機編程主題-拍攝照片和電影,這將在您的應用程序中獲取圖像。

之后,請看以下內容: 如何在iPhone上的圖像上獲取像素的RGB值

從UIImage獲取CGImage可以為您提供此數據

CFDataRef pixelData = CGDataProviderCopyData(CGImageGetDataProvider(image.CGImage));
const UInt8* data = CFDataGetBytePtr(pixelData);

int pixelInfo = ((image.size.width  * y) + x ) * 4; // The image is png

UInt8 red = data[pixelInfo];         
UInt8 green = data[(pixelInfo + 1)]; 
UInt8 blue = data[pixelInfo + 2];    
UInt8 alpha = data[pixelInfo + 3];     
CFRelease(pixelData);

更多信息: 從UIImageView獲取像素數據-在模擬器上工作,而不在設備上工作

在這里: 獲取UIImage的像素顏色

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM