如何在imageview ios中获取自定义图像的像素颜色值? [英] How to get the pixel color values of custom image inside imageview ios?

查看:189
本文介绍了如何在imageview ios中获取自定义图像的像素颜色值?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我之前已经问过类似的问题。

I know similar question have been asked before.

我想要的是获取图像的RGB像素值 Imageview ,所以它可以是我们想要获得的像素值的任何图像。

What I want is to get the RGB pixel value of the Image Inside the Imageview, so it can be any image that pixel values we want to get.

这是我用来获得图像所在的点点击。

This is what I have used to get the point where the image is clicked.

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

    UITouch *touch = [touches anyObject];

    if ([touch tapCount] == 2) {
        //self.imageView.image = nil;
        return;
    }

    CGPoint lastPoint = [touch locationInView:self.imageViewGallery];
    NSLog(@"%f",lastPoint.x);
    NSLog(@"%f",lastPoint.y);

} 

要获取图像,我已粘贴此代码。

And To get the Image I have Pasted this code.

+ (NSArray*)getRGBAsFromImage:(UIImage *)image atX:(int)xx andY:(int)yy count:(int)count
{

 NSMutableArray *result = [NSMutableArray arrayWithCapacity:count];

      /** It requires to get the image into your data buffer, so how can we get the `ImageViewImage` **/

CGImageRef imageRef = [image CGImage];
NSUInteger width = CGImageGetWidth(imageRef);
NSUInteger height = CGImageGetHeight(imageRef);
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
unsigned char *rawData = (unsigned char*) calloc(height * width * 4, sizeof(unsigned char));
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), imageRef);
CGContextRelease(context);

// Now your rawData contains the image data in the RGBA8888 pixel format.
int byteIndex = (bytesPerRow * yy) + xx * bytesPerPixel;
for (int ii = 0 ; ii < count ; ++ii)
{
    CGFloat red   = (rawData[byteIndex]     * 1.0) / 255.0;
    CGFloat green = (rawData[byteIndex + 1] * 1.0) / 255.0;
    CGFloat blue  = (rawData[byteIndex + 2] * 1.0) / 255.0;
    CGFloat alpha = (rawData[byteIndex + 3] * 1.0) / 255.0;
    byteIndex += 4;

    UIColor *acolor = [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
    [result addObject:acolor];
}

free(rawData);

return result;
}

我是ios的新手,所以请解释一下,并建议一些教程将是大。

I am new to ios so please explain and It and suggesting some tutorial will be great.

推荐答案

使用此示例文章。它正在谈论使用图像的颜色选择器。您可以非常轻松地从中了解所需信息。帮助我在我的应用程序。如果有任何帮助/建议,请告诉我.. :)

Use this example article. It is talking about a color picker using images. You can understand required info very easily from it. Helped me in my app. Let me know if any help/suggestion needed ..:)

编辑:

像这样更新你的 getPixelColorAtLocation:。它会给你正确的颜色。

update your getPixelColorAtLocation: like this. It will give you correct color then.

- (UIColor*) getPixelColorAtLocation:(CGPoint)point {
    UIColor* color = nil;
    CGImageRef inImage = self.image.CGImage;
    // Create off screen bitmap context to draw the image into. Format ARGB is 4 bytes for each pixel: Alpa, Red, Green, Blue
    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}};
/** Extra Added code for Resized Images ****/
    float xscale = w / self.frame.size.width;
    float yscale = h / self.frame.size.height;
    point.x = point.x * xscale;
    point.y = point.y * yscale;
 /** ****************************************/

/** Extra Code Added for Resolution ***********/
    CGFloat x = 1.0;
    if ([self.image respondsToSelector:@selector(scale)]) x = self.image.scale;
/*********************************************/
    // Draw the image to the bitmap context. Once we draw, the memory 
    // allocated for the context for rendering will then contain the 
    // raw image data in the specified color space.
    CGContextDrawImage(cgctx, rect, inImage); 

    // Now we can get a pointer to the image data associated with the bitmap
    // context.
    unsigned char* data = CGBitmapContextGetData (cgctx);
    if (data != NULL) {
        //offset locates the pixel in the data from x,y. 
        //4 for 4 bytes of data per pixel, w is width of one row of data.
//      int offset = 4*((w*round(point.y))+round(point.x));


        int offset = 4*((w*round(point.y))+round(point.x))*x; //Replacement for Resolution
        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)];
    }

    // When finished, release the context
    CGContextRelease(cgctx); 
    // Free image data memory for the context
    if (data) { free(data); }

    return color;
}

告诉我这个修复不起作用.. :)

Let me know this fix does not work .. :)

这是我的 GitHub 码。用它来实现选择器图像。如果需要更多信息,请告诉我

Here is the GitHub for my code. Use it to implement picker image. Let me know if more info needed

这篇关于如何在imageview ios中获取自定义图像的像素颜色值?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆