获取图片每(某)个像素点的RBGA值
来源:互联网 发布:练英语六级听力的软件 编辑:程序博客网 时间:2024/06/05 20:07
最近项目有个需求,获取调色板上某个点的RBGA值,来设置背景颜色。查找了一些资料,经过多次测试,最终拿到的RGBA值基本一致(这里为什么说基本一致呢,如果RGBA值的取值范围在0~255之间的话,结果会有1-2个点的误差)。方法如下:
获取图片上某个点的RGBA值
//获取图片某个点的RGBA值- (NSMutableArray *)getImagePixel:(UIImage *)image point:(CGPoint)aPoint { NSMutableArray *byteArray = [[NSMutableArray alloc] initWithCapacity:10]; CGImageRef cgimage = image.CGImage; size_t scale = CGImageGetWidth(cgimage) / image.size.width; size_t bpr = CGImageGetBytesPerRow(cgimage); //每行的字节数 size_t bpp = CGImageGetBitsPerPixel(cgimage); //每个像素的位数 size_t bpc = CGImageGetBitsPerComponent(cgimage); //每个字节的组成部分 size_t bytes_per_pixel = bpp / bpc; // Get CGDataProviderRef from cgimage CGDataProviderRef provider = CGImageGetDataProvider(cgimage); @autoreleasepool { //Using (__bridge_transfer NSData *) casts the provider to type NSData and gives ownership to ARC, but still not discarded NSData *data = (__bridge_transfer NSData *)CGDataProviderCopyData(provider); const UInt8 *bytes = (Byte *)[data bytes]; size_t row = aPoint.y*scale; size_t col = aPoint.x*scale; const UInt8* pixel = &bytes[row * bpr + col * bytes_per_pixel]; for(unsigned short i = 0; i < 4; i+=4) { unsigned short red = pixel[i]; // red channel - unused unsigned short green = pixel[i+1]; // green channel unsigned short blue = pixel[i+2]; // blue channel unsigned short alpha = pixel[i+3]; // alpha channel - unused [byteArray addObject:@(red)]; [byteArray addObject:@(green)]; [byteArray addObject:@(blue)]; [byteArray addObject:@(alpha)]; } data = nil; } return byteArray;}
获取图片每个像素点的RGBA值
//获取图片每个像素点的RGBA值- (NSMutableArray *)getImagePixel:(UIImage *)image point:(CGPoint)aPoint { // Create array to add all files into total image NSMutableArray *byteArray = [[NSMutableArray alloc] initWithCapacity:(image.size.width * image.size.height)]; CGImageRef cgimage = image.CGImage; size_t width = CGImageGetWidth(cgimage); size_t height = CGImageGetHeight(cgimage); size_t bpr = CGImageGetBytesPerRow(cgimage); //每行的字节数 size_t bpp = CGImageGetBitsPerPixel(cgimage); //每个像素的位数 size_t bpc = CGImageGetBitsPerComponent(cgimage); //每个字节的组成部分 size_t bytes_per_pixel = bpp / bpc; // Get CGDataProviderRef from cgimage CGDataProviderRef provider = CGImageGetDataProvider(cgimage); @autoreleasepool { //Using (__bridge_transfer NSData *) casts the provider to type NSData and gives ownership to ARC, but still not discarded NSData *data = (__bridge_transfer NSData *)CGDataProviderCopyData(provider); const UInt8 *bytes = (Byte *)[data bytes]; // Populate byte array with channel data from each pixel for(size_t row = 0; row < height; row++) { for(size_t col = 0; col < width; col++) { const UInt8* pixel = &bytes[row * bpr + col * bytes_per_pixel]; for(unsigned short i = 0; i < 4; i+=4) { unsigned short red = pixel[i]; // red channel unsigned short green = pixel[i+1]; // green channel unsigned short blue = pixel[i+2]; // blue channel unsigned short alpha = pixel[i+3]; // alpha channel [byteArray addObject:@(red)]; [byteArray addObject:@(green)]; [byteArray addObject:@(blue)]; [byteArray addObject:@(alpha)]; } } } data = nil; } return byteArray;}
0 0
- 获取图片每(某)个像素点的RBGA值
- 获取一个图片像素点RGB值的代码
- 获取一个图片像素点RGB值的代码
- java获取图片像素点的RGB值
- OpenCV获取某点的像素值
- OpenCV获取某点的像素值
- C# 获取图片某像素点RGB565值
- C# 获取图片某像素点RGB565值
- 获取图片像素点颜色值
- IOS获取图片中某个像素点的像素值,包括ARGB的各个值
- 如何获取图片中第一个像素的颜色值?
- 【opencv】获取图片某点像素值的两种方法
- 获取图片的像素值
- 获取图片的像素值
- cocos2dx 获取某像素点的rgba值
- 获取图片每个像素点的RGB并计算灰度值
- object-c实现获取一个图片像素点RGB值的代码
- Android下正确获取屏幕触摸点下的图片像素值
- Android studio无法创建新项目问题解决方案一
- C++中编译预处理功能
- 再一次, 不要使用(include/require)_once
- [Leetcode]Contains Duplicate III
- python 流程控制
- 获取图片每(某)个像素点的RBGA值
- 2440 x35 lcd屏幕学习笔记
- IOS 学习记录 表格单元格放入缓存池
- gif表情
- ucloud中的udisk错误“Read-only file system”修复指南
- [原]敏捷开发项目中升级mysql数据库,谈谈结构、数据比对,navicat for mysql + dbForge Data Compare for MySQL 足矣!
- Maven更改默认Jdk版本
- 前端开发:用户体验不佳的八大细节
- 四则运算表达式解析