zoukankan      html  css  js  c++  java
  • iOS 获取图片某一点的颜色对象(UIColor*)。




    - (UIColor *)colorAtPixel:(CGPoint)point {

        // Cancel if point is outside image coordinates

        if (!CGRectContainsPoint(CGRectMake(0.0f, 0.0f, self.size.width, self.size.height), point)) {

            return nil;

        }


        NSInteger pointX = trunc(point.x);

        NSInteger pointY = trunc(point.y);

        CGImageRef cgImage = self.CGImage;

        NSUInteger width = self.size.width;

        NSUInteger height = self.size.height;

        CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();

        int bytesPerPixel = 4;

        int bytesPerRow = bytesPerPixel * 1;

        NSUInteger bitsPerComponent = 8;

        unsigned char pixelData[4] = { 0, 0, 0, 0 };

        CGContextRef context = CGBitmapContextCreate(pixelData, 

                                                     1,

                                                     1,

                                                     bitsPerComponent, 

                                                     bytesPerRow, 

                                                     colorSpace,

                                                     kCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32Big);

        CGColorSpaceRelease(colorSpace);

        CGContextSetBlendMode(context, kCGBlendModeCopy);


        // Draw the pixel we are interested in onto the bitmap context

        CGContextTranslateCTM(context, -pointX, pointY-(CGFloat)height);

        CGContextDrawImage(context, CGRectMake(0.0f, 0.0f, (CGFloat)width, (CGFloat)height), cgImage);

        CGContextRelease(context);

        

        // Convert color values [0..255] to floats [0.0..1.0]

        CGFloat red   = (CGFloat)pixelData[0] / 255.0f;

        CGFloat green = (CGFloat)pixelData[1] / 255.0f;

        CGFloat blue  = (CGFloat)pixelData[2] / 255.0f;

        CGFloat alpha = (CGFloat)pixelData[3] / 255.0f;

        return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];

    }






    UIImage+ColorAtPixel.h
     
    #import <UIKit/UIKit.h>
    
    /*
     A category on UIImage that enables you to query the color value of arbitrary 
     pixels of the image.
     */
    @interface UIImage (ColorAtPixel)
    
    - (UIColor *)colorAtPixel:(CGPoint)point;
    
    @end
    
    
    #import <CoreGraphics/CoreGraphics.h>
    
    #import "UIImage+ColorAtPixel.h"
    
    
    @implementation UIImage (ColorAtPixel)
    
    - (UIColor *)colorAtPixel:(CGPoint)point {
        // Cancel if point is outside image coordinates
        if (!CGRectContainsPoint(CGRectMake(0.0f, 0.0f, self.size.width, self.size.height), point)) {
            return nil;
        }
    
        NSInteger pointX = trunc(point.x);
        NSInteger pointY = trunc(point.y);
        CGImageRef cgImage = self.CGImage;
        NSUInteger width = self.size.width;
        NSUInteger height = self.size.height;
        CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
        int bytesPerPixel = 4;
        int bytesPerRow = bytesPerPixel * 1;
        NSUInteger bitsPerComponent = 8;
        unsigned char pixelData[4] = { 0, 0, 0, 0 };
        CGContextRef context = CGBitmapContextCreate(pixelData, 
                                                     1,
                                                     1,
                                                     bitsPerComponent, 
                                                     bytesPerRow, 
                                                     colorSpace,
                                                     kCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32Big);
        CGColorSpaceRelease(colorSpace);
        CGContextSetBlendMode(context, kCGBlendModeCopy);
    
        // Draw the pixel we are interested in onto the bitmap context
        CGContextTranslateCTM(context, -pointX, pointY-(CGFloat)height);
        CGContextDrawImage(context, CGRectMake(0.0f, 0.0f, (CGFloat)width, (CGFloat)height), cgImage);
        CGContextRelease(context);
        
        // Convert color values [0..255] to floats [0.0..1.0]
        CGFloat red   = (CGFloat)pixelData[0] / 255.0f;
        CGFloat green = (CGFloat)pixelData[1] / 255.0f;
        CGFloat blue  = (CGFloat)pixelData[2] / 255.0f;
        CGFloat alpha = (CGFloat)pixelData[3] / 255.0f;
        return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
    }
    
    @end
    
    



  • 相关阅读:
    【数据结构】线性表&&顺序表详解和代码实例
    【智能算法】超详细的遗传算法(Genetic Algorithm)解析和TSP求解代码详解
    【智能算法】用模拟退火(SA, Simulated Annealing)算法解决旅行商问题 (TSP, Traveling Salesman Problem)
    【智能算法】迭代局部搜索(Iterated Local Search, ILS)详解
    10. js时间格式转换
    2. 解决svn working copy locked问题
    1. easyui tree 初始化的两种方式
    10. js截取最后一个斜杠后面的字符串
    2. apache整合tomcat部署集群
    1. apache如何启动
  • 原文地址:https://www.cnblogs.com/jhcelue/p/7227130.html
Copyright © 2011-2022 走看看