获取图片的每一个像素颜色值

+ (NSArray*)getRGBAsFromImage:(UIImage*)image atX:(int)x andY:(int)y count:(int)count
{
    NSMutableArray *result = [NSMutableArray arrayWithCapacity:count];

    // First get the image into your data buffer
    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.
    NSUInteger byteIndex = (bytesPerRow * y) + x * bytesPerPixel;
    for (int i = 0 ; i < count ; ++i)
    {
        CGFloat alpha = ((CGFloat) rawData[byteIndex + 3] ) / 255.0f;
        CGFloat red   = ((CGFloat) rawData[byteIndex]     ) / alpha;
        CGFloat green = ((CGFloat) rawData[byteIndex + 1] ) / alpha;
        CGFloat blue  = ((CGFloat) rawData[byteIndex + 2] ) / alpha;
        byteIndex += bytesPerPixel;

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

  free(rawData);

  return result;
}
时间: 2024-11-04 01:50:30

获取图片的每一个像素颜色值的相关文章

swift获取图片像素颜色值

extension UIImage{ /** 获取图片中的像素颜色值 - parameter pos: 图片中的位置 - returns: 颜色值 */ func getPixelColor(pos:CGPoint)->(alpha: CGFloat, red: CGFloat, green: CGFloat,blue:CGFloat){ let pixelData=CGDataProviderCopyData(CGImageGetDataProvider(self.CGImage)) let

PHP获取图片颜色值

PHP获取图片颜色值,检测图片主要颜色的代码: <?php $i=imagecreatefromjpeg("photo3.jpg");//测试图片,自己定义一个,注意路径 for ($x=0;$x<imagesx($i);$x++) { for ($y=0;$y<imagesy($i);$y++) { $rgb = imagecolorat($i,$x,$y); $r=($rgb >>16) & 0xFF; $g=($rgb >> &a

【练习4.2】使用鼠标事件获取图片像素值

<学习OpenCV>中文版第4章第2题 题目要求: 点击图片是获取该点的颜色值,并在图像上点击鼠标处用文本将颜色值显示出来. 程序代码: 1 #include "stdafx.h" 2 #include <cv.h> 3 #include <highgui.h> 4 using namespace std; 5 using namespace cv; 6 7 void MouseCallBack(int event, int x, int y, in

OpenCV获取图片所有对应坐标中的像素值

获取图片所有对应坐标中的像素值.直接上代码了 #include <iostream> #include "cv.h" #include <highgui.h> #include<fstream> using namespace std; int main() { IplImage *img = cvLoadImage("C:\\Users\\Sunstarisme\\Desktop\\Lemon\\All Frames\\2.bmp&quo

获取图片的主色调

有时候我们需要找出一张图片中的主色调,这里的主色调并不是指颜色最多的,而是指最"醒目"的. 例如 win8 在更换桌面壁纸后,会将任务栏的背景色改为该壁纸的主色调. 看下面几张图可以更直观的明白"醒目"的意思. (这张图里面最醒目的无疑是紫红色的小花,而不是颜色占大多数的淡青色背景) (这张图也一样,最醒目的颜色应该是深红色,而不是深蓝色) 我想了一个简单的办法,就是根据图片中每个像素的色调值去判断哪些像素符合"醒目"这个特性. 分三步进行 1.

imagick获取图片的大小bug

<? php /* imagick的获取图片的高度和宽度函数有问题,使用GD函数可获得正确结果 gd函数 array getimagesize ( string $filename [, array &$imageinfo ] ) getimagesize() 函数将測定不论什么 GIF,JPG,PNG,SWF.SWC.PSD.TIFF,BMP,IFF.JP2,JPX.JB2.JPC,XBM 或 WBMP 图像文件的大小并返回图像的尺寸以及文件类型和一个能够用于普通 HTML 文件里 IMG

atitit.图片相似度与图片查找的设计 获取图片指纹

atitit.图片相似度与图片查找的设计. 1. 两张图片相似算法 1 2. DCT(离散余弦变换(DiscreteCosineTransform))编辑 2 3.  编辑距离编辑 3 4. Java数字图像处理基础知识 - 必读 3 5. 汉明距离  4 5.1. 目录 4 5.2. 1介绍 5 6. Attilax框架实现 5 6.1. 获取图片指纹 5 6.2. 获取图像不相似度 6 7. 参考 6 1. 两张图片相似算法 ,原理非常简单易懂.我们可以用一个快速算法,就达到基本的效果. 这

利用php获取图片完整Exif信息类 获取图片详细完整信息类

这个是最近写的一个php获取图片Exif类,功能比较全面,也把所有的Exif都翻译了,执行效率也还可以. 唉,这次懒地写英文版了,以后有时间把英文版也做下.同样,不设置隐藏,也不需金钱. 因为这里不能贴链接,我博客里有个测试网页,大家如果有兴趣,可以去看看tonylevid.com 分两大模式:一个是已经转换数据的(如width:500px)用于显示:一个是未转换数据的如(width:500)用于用户自己自定义计算. 内置3种获取模式,用户可以自定义数组来获取. 注意:需在php.ini中开启m

前端获取图片压缩后上传给后台

 此前有同事跟我聊过关于移动端用canvas压缩图片后再上传的功能,最近有了点空闲时间,所以就实践了一下.demo效果链接在文章底部贴出. 在做移动端图片上传的时候,用户传的都是手机本地图片,而本地图片一般都相对比较大,拿iphone6来说,平时拍很多图片都是一两M的,如果直接这样上传,那图片就太大了,如果用户用的是移动流量,完全把图片上传显然不是一个好办法. 目前来说,HTML5的各种新API都在移动端的webkit上得到了较好的 实现.根据查看caniuse,本demo里使用到的FileRe