获取图片指定点的RGBA
来源:互联网 发布:2016春晚网络直播 编辑:程序博客网 时间:2024/06/12 01:24
/** * 获取图片指定位置的color * * @param point 需要获取位置的店 * @param img 需要获取颜色的图片 * * @return img的point处的位置 */- (UIColor*) getPixelColorAtLocation:(CGPoint)point image:(UIImage *)img { UIColor* color = nil; CGImageRef inImage = img.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}}; // 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 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); } LogRed(@"%@",color); return color;}- (CGContextRef) createARGBBitmapContextFromImage:(CGImageRef) inImage { CGContextRef context = NULL; CGColorSpaceRef colorSpace; void * bitmapData; int bitmapByteCount; int bitmapBytesPerRow; // Get image width, height. We'll use the entire image. size_t pixelsWide = CGImageGetWidth(inImage); size_t pixelsHigh = CGImageGetHeight(inImage); // Declare the number of bytes per row. Each pixel in the bitmap in this // example is represented by 4 bytes; 8 bits each of red, green, blue, and // alpha. bitmapBytesPerRow = (int)(pixelsWide * 4); bitmapByteCount = (int)(bitmapBytesPerRow * pixelsHigh); // Use the generic RGB color space. colorSpace = CGColorSpaceCreateDeviceRGB(); if (colorSpace == NULL) { fprintf(stderr, "Error allocating color space\n"); return NULL; } //为img申请空间 bitmapData = malloc( bitmapByteCount ); if (bitmapData == NULL) { fprintf (stderr, "Memory not allocated!"); CGColorSpaceRelease( colorSpace ); return NULL; } //创建bitmap上下文,每部分8个字节,这里不区分图片的格式,都会被CGBitmapContextCreate转成想要的格式 context = CGBitmapContextCreate (bitmapData, pixelsWide, pixelsHigh, 8, bitmapBytesPerRow, colorSpace, kCGImageAlphaPremultipliedFirst); if (context == NULL) { free (bitmapData); fprintf (stderr, "Context not created!"); } // 适当空间 CGColorSpaceRelease( colorSpace ); return context;}
0 0
- 获取图片指定点的RGBA
- 获取PNG图片的RGBA
- 获取Cocosdx精灵的像素点的RGBA
- cocos2dx 获取某像素点的rgba值
- 获取图片某个像素RGBA值
- cocos2dx-2.2.2 点击图片,获取图片对应像素的RGBA值
- C#获取图片的指定部分
- Android获取图片指定大小的缩略图
- Android获取图片指定大小的缩略图
- Android获取图片指定大小的缩略图
- Android获取图片指定大小的缩略图
- 【android】获取指定目录下的图片
- 获取指定颜色和大小的图片
- 获取图片的点的RGB
- 获取图片旋转后的坐标点
- 图片旋转特征点的获取
- 获取图片某一点的rgb色值
- cocos2dx获取图片某一点的颜色
- 函数内部属性arguments和this讲解
- Longest Common Prefix Leetcode Python Java
- Android Studio关联SVN相关操作
- Android_Fragment的生命周期与返回栈BackStack
- iOS知识总结(使用gitbook)
- 获取图片指定点的RGBA
- C++ - 蓝桥杯 - 算法提高 学霸的迷宫 (bfs+记录路径)
- CATransition过渡
- java编程相关总结(一)
- java随机动态生成汉字验证码图片的实例代码分享
- Best Time to Buy and Sell Stock Series
- MNIST数据库读取
- [83] Remove Duplicates from Sorted List
- oracle 建立数据库