美文网首页
【iOS】图片吸某一位置的颜色

【iOS】图片吸某一位置的颜色

作者: FineFan | 来源:发表于2019-08-01 12:20 被阅读0次

    - (CGContextRef)createARGBBitmapContextWithImage:(UIImage*)image {

        // Get image width, height

        size_t pixelsWide = CGImageGetWidth(image.CGImage);

        size_t pixelsHigh = CGImageGetHeight(image.CGImage);

        // Declare the number of bytes per row

        NSIntegerbitmapBytesPerRow  = (pixelsWide *4);

        NSIntegerbitmapByteCount    = (bitmapBytesPerRow * pixelsHigh);

        // Use the generic RGB color space.

        CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();

        if(colorSpace ==NULL) {

            return NULL;

        }

        // Allocate memory for image data

        void*bitmapData =malloc( bitmapByteCount );

        if(bitmapData ==NULL) {

            CGColorSpaceRelease( colorSpace );

            return NULL;

        }

        // Create the bitmap context

        CGContextRef context = CGBitmapContextCreate (bitmapData,

                                                      pixelsWide,

                                                      pixelsHigh,

                                                      8,      // bits per component

                                                      bitmapBytesPerRow,

                                                      colorSpace,

                                                      kCGImageAlphaPremultipliedFirst);

        if(context ==NULL) {

            free(bitmapData);

        }

        // release colorspace before returning

        CGColorSpaceRelease( colorSpace );

        returncontext;

    }

    - (UIColor*)getPixelColorAtPoint:(CGPoint)point Image:(UIImage*)image

    {

        UIColor* color =nil;

        CGImageRefinImage = image.CGImage;

        // Create bitmap context to draw the image into

        CGContextRef cgctx = [self createARGBBitmapContextWithImage:image];

        if(cgctx ==NULL) {

            returnnil;/* error */

        }

        size_t w = CGImageGetWidth(inImage);

        size_t h = CGImageGetHeight(inImage);

        CGRectrect = {{0,0},{w,h}};

        // Draw the image to the bitmap context

        CGContextDrawImage(cgctx, rect, inImage);

        // get image data

        unsignedchar* 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.

            intoffset =4*((w*round(point.y))+round(point.x));

            intalpha =  data[offset];

            intred = data[offset+1];

            intgreen = data[offset+2];

            intblue = data[offset+3];

            //NSLog(@"offset: %i colors: RGB A %i %i %i  %i",offset,red,green,blue,alpha);

            color = [UIColorcolorWithRed:(red/255.0f)green:(green/255.0f)blue:(blue/255.0f)alpha:(alpha/255.0f)];

        }

        //release the context

        CGContextRelease(cgctx);

        // Free image data

        if(data) {

            free(data);

        }

        returncolor;

    }

    相关文章

      网友评论

          本文标题:【iOS】图片吸某一位置的颜色

          本文链接:https://www.haomeiwen.com/subject/ddjqdctx.html