零基础 Object-C 学习路线推荐 : Object-C 学习目录 >> Object-C 基础
零基础 Object-C 学习路线推荐 : Object-C 学习目录 >> Object-C 线程
零基础 Object-C 学习路线推荐 : Object-C 学习目录 >> OpenGL ES
零基础 Object-C 学习路线推荐 : Object-C 学习目录 >> GPUImage
零基础 Object-C 学习路线推荐 : Object-C 学习目录 >> AVFoundation
零基础 Object-C 学习路线推荐 : Object-C 学习目录 >> CocoaPods
一.函数简介
iOS 视频图像开发中无法避免使用到 UIImage 与 Bytes Pixel 之间转换。bytes pixel 可以理解为将一张图片的所有像素点写到二维数组中。
/**
* @param data 指向要渲染的绘制内存的地址。这个内存块的大小至少是(bytesPerRow*height)个字节
* @param width bitmap的宽度,单位为像素
* @param height bitmap的高度,单位为像素
* @param bitsPerComponent 内存中像素的每个组件的位数.例如,对于32位像素格式和RGB颜色空间,你应该将这个值设为8.
* @param bytesPerRow bitmap的每一行在内存所占的比特数
* @param space bitmap上下文使用的颜色空间
* @param bitmapInfo 指定bitmap是否包含alpha通道,像素中alpha通道的相对位置,像素组件是整形还是浮点型等信息的字符串。
*/
CGContextRef CGBitmapContextCreate(void *data, size_t width, size_t height, size_t bitsPerComponent, size_t bytesPerRow, CGColorSpaceRef colorspace, CGBitmapInfo bitmapInfo);
二.UIImage 转 RGBA
/******************************************************************************************/
//@Author:猿说编程
//@Blog(个人博客地址): www.codersrc.com
//@File:iOS UIImage 转 RGBA
//@Time:2021/09/01 08:00
//@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
/******************************************************************************************/
- (unsigned char*)pixelBRGABytesFromImage:(UIImage *)image {
int imageWidth = image.size.width;
int imageHeight = image.size.height;
CGImageRef cgImage = [image CGImage];
unsigned char* srcPixel = (unsigned char*)calloc(1, (int)imageWidth*(int)imageHeight*4);
CGColorSpaceRef genericRGBColorspace = CGColorSpaceCreateDeviceRGB();
//kCGBitmapByteOrder32Big | kCGImageAlphaPremultipliedLast
//kCGBitmapByteOrder32Little | kCGImageAlphaPremultipliedFirst
CGContextRef imageContext = CGBitmapContextCreate(srcPixel, imageWidth, imageHeight, 8, 4*imageWidth, genericRGBColorspace, kCGBitmapByteOrder32Little | kCGImageAlphaPremultipliedFirst);
CGContextDrawImage(imageContext, CGRectMake(0.0, 0.0, imageWidth, imageHeight), cgImage);
CGContextRelease(imageContext);
CGColorSpaceRelease(genericRGBColorspace);
//需要用户自己释放,否则有内存泄漏
return srcPixel;;
}
三.RGBA 转 UIImage
/******************************************************************************************/
//@Author:猿说编程
//@Blog(个人博客地址): www.codersrc.com
//@File:iOS RGBA 转 UIImage
//@Time:2021/08/31 08:00
//@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
/******************************************************************************************/
-(UIImage*)getImageFromRGBA:(GLubyte*)pixel width:(int)w height:(int)h
{
int perPix = 4;
int width = w;
int height = h;
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
CGContextRef newContext = CGBitmapContextCreate(pixel, width, height, 8,width * perPix,colorSpace, kCGBitmapByteOrder32Little | kCGImageAlphaPremultipliedFirst);
CGImageRef frame = CGBitmapContextCreateImage(newContext);
UIImage* image = [UIImage imageWithCGImage:frame];
CGImageRelease(frame);
CGContextRelease(newContext);
CGColorSpaceRelease(colorSpace);
return image;
}
四.猜你喜欢
- Xcode – The application’s Info.plist does not contain CFBundleShortVersionString.
- Xcode – This app has attempted to access privacy-sensitive data without a usage description.
- Xcode replace 使用正则表达式替换文字
- Object-C 获取系统字体和字体名字
- Object-C 加载 TTF/OTF/TTC 文件
- Object-C private var mobileDevice文件夹
- Object-C 保存文件到相册
- NSString 字符串的排序
- Xcode – Embedded binary’s bundle identifier is not prefixed with the parent app’s bundle identifier
- Xcode – Your maximum App ID limit has been reached. You may create up to 10 App IDs every 7 days
- iOS UIImage 与 RGBA 相互转换
ChatGPT 3.5 国内中文镜像站免费使用啦
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
暂无评论内容