音视频

音视频之基础+渲染流程

2019-09-24  本文已影响0人  Coder东

常用图形API简介:

OpenGL(Open Graphics Library)是一个跨编程语言、跨平台的编程图形程序接口,它将计算机的资源抽象称一个个OpenGL的对象,对这些资源的操作抽象为一个个的OpenGL指令。
OpenGL ES(OpenGL for Embedded Systems)是OpenGL三维图形API的子集,针对手机PDA和游戏机等嵌入式设备而设计,去除了许多不必要和性能低的API的接口。
DirectX 是由很多API组成的,DirectX并不是一个单纯的图形API,最重要的是DirectX是属于Windows上一个多媒体处理API,并不支持Windows以外的平台,所以不是跨平台的框架,按照性质分类。可以分为四大部分:显示部分、声音部分、输入部分和网络部分。
Metal :Metal :Apple为游戏开发者退出了新的平台技术Metal,该技术能够为3D图像提高10倍的渲染性。Metal是Apple为解决3D渲染而推出的框架

OpenGL / OpenGL ES /Metal在任何项目中解决问题的本质就是利用GPU芯片来高效渲染图形图像,图形API是iOS开发唯一接近GPU的方式

//  Created by 随风流年 
//  Copyright © 2019 随风流年. All rights reserved.
//

#import "ViewController.h"
#import <CoreLocation/CoreLocation.h>

@interface ViewController ()
@property (nonatomic, weak) UIImageView *imageView;
@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    [self image];

}
- (void)image{
    UIImageView *imageView = [[UIImageView alloc]init];
    imageView.frame = CGRectMake(100, 100, 100, 100);
    [self.view addSubview:imageView];
    self.imageView = imageView;
    dispatch_async(dispatch_get_global_queue(0, 0), ^{
        //获取CGImage
        CGImageRef cgImage = [UIImage imageNamed:@"img"].CGImage;
        
        // alphaInfo
        CGImageAlphaInfo alphaInfo = CGImageGetAlphaInfo(cgImage) & kCGBitmapAlphaInfoMask;
        BOOL hasAlpha = NO;
        if (alphaInfo == kCGImageAlphaPremultipliedLast ||
            alphaInfo == kCGImageAlphaPremultipliedFirst ||
            alphaInfo == kCGImageAlphaLast ||
            alphaInfo == kCGImageAlphaFirst) {
            hasAlpha = YES;
        }
        //bitmapInfo
        CGBitmapInfo bitmapInfo = kCGBitmapByteOrder32Host;
        bitmapInfo |= hasAlpha ? kCGImageAlphaPremultipliedFirst : kCGImageAlphaNoneSkipFirst;
        //size
        size_t width = CGImageGetWidth(cgImage);
        size_t height = CGImageGetHeight(cgImage);
        
        //context
        CGContextRef context = CGBitmapContextCreate(NULL, width, height, 8, 0, CGColorSpaceCreateDeviceRGB(), bitmapInfo);
        //draw
        CGContextDrawImage(context, CGRectMake(0, 0, width, height), cgImage);
        //get CGImage
        cgImage = CGBitmapContextCreateImage(context);
        //into UIImage
        UIImage *newImage = [UIImage imageWithCGImage:cgImage];
        //release
        CGContextRelease(context);
        CGImageRelease(cgImage);
        
        //back to main thread
        dispatch_async(dispatch_get_main_queue(), ^{
            self.imageView.image = newImage;
        });
        
    });
}
上一篇下一篇

猜你喜欢

热点阅读