• iOS 取得CGimage字节数据的方法


    通过我在网上搜索和总结,目前看来,我发现两种比较方便的方式。

    1. CGImage -> CGDataProvider -> CFData -> xx *

    CGDataProviderRef provider =CGImageGetDataProvider(CGImage);
    void*data =(void*)CFDataGetBytePtr(CGDataProviderCopyData(provider));

    这样得到的就是void*类型的数据.

    2. CGImage -> CGContext -> void *

    int sWidth=CGImageGetWidth(CGImage);
    int sHeight=CGImageGetHeight(CGImage);
    CGImageRef mContent =CGImage;
    CGContextRef context =CGBitmapContextCreate(NULL,CGImageGetWidth(mContent),CGImageGetHeight(mContent),
    CGImageGetBitsPerComponent(mContent),CGImageGetBytesPerRow(mContent),
    CGImageGetColorSpace(mContent),CGImageGetBitmapInfo(mContent));
    CGContextDrawImage(context,CGRectMake(0,0, sWidth, sHeight), mContent);
    void*data=CGBitmapContextGetData(context);

    当得到CGimage的字节数据,有时又需要把它转化成UIImage.

    void*data;
    CGDataProviderRef pv=CGDataProviderCreateWithData(data, data, sWidth*sHeight*4,ContentReleaseCallBack);
    CGImageRef content=CGImageCreate(sWidth , sHeight,8,32,4*sWidth,
    CGColorSpaceCreateDeviceRGB(), kCGBitmapByteOrder32Big | kCGImageAlphaNoneSkipLast,
    pv, NULL,true, kCGRenderingIntentDefault);
    UIImage*ci =[UIImage imageWithCGImage:content];

    以上一套方法,能正常显示图像,只是在alpha的值上和原图有些不一样转成字节数据再转换成UIImage以后,原本是透明的部分变成了黑色

    UIImage *ci = [UIImage imageWithData:[NSData dataWithBytes:data length:sWidth*sHeight*4]];
  • 相关阅读:
    C# Bitmap类型与Byte[]类型相互转化
    我所理解的JavaScript闭包
    从零开始编写自己的C#框架 ---- 系列文章
    巧用Windows 7计划任务设置定时提醒
    vba中MsgBox的参数及用法
    SQL行转列和列转行
    web应用程序 ---- 日志系统的设计
    《代码整洁之道》读书笔记
    使用Excel制作万年历(日历可A4纸打印)
    C#窗体全屏功能
  • 原文地址:https://www.cnblogs.com/ligun123/p/3205321.html
Copyright © 2020-2023  润新知