您的位置:首页 > 移动开发 > IOS开发

IOS-图片操作集合

2012-06-23 10:28 459 查看
CFURLRef.

CFDataRef and CFMutableDataRef  --- NSData

Raw data

编辑图片的几个方法

第一种

先用UIImage对象加载一张图片

然后转化成CGImageRef放到CGContext中去编辑

第二种 

用CGImageCreate函数创建CGImageRef

然后把CGImageRef放到CGContext中去编辑

第三种

用CGImageCreateCopy 或者 CGImageCreateCopyWithColorSpace

函数拷贝

CGImageRef CGImageCreate (

   size_t width, //图片的宽度

   size_t height, //图片的高度

   size_t bitsPerComponent,
//图片每个颜色的bits,比如rgb颜色空间,有可能是5 或者 8 ==

   size_t bitsPerPixel,
//每一个像素占用的buts,15 位24位 32位等等

   size_t bytesPerRow, //每一行占用多少bytes 注意是bytes不是bits  1byte = 8bit

   CGColorSpaceRef colorspace,
//颜色空间,比如rgb

   CGBitmapInfo bitmapInfo,
//layout ,像素中bit的布局, 是rgba还是 argb,==

   CGDataProviderRef provider,
//数据源提供者,url或者内存==

   const CGFloat decode[],
//一个解码数组

   bool shouldInterpolate,
//抗锯齿参数

   CGColorRenderingIntent intent
//图片渲染相关参数

);

创建 image mask的一个途径

CGImageMaskCreate

给图片加mask有两种方法,

第一种

使用函数 CGImageCreateWithMask 或者 CGImageCreateWithMaskingColors 在图片上直接打上mask

这样做对原来的图片要求带有 alpha通道,假如没有,那么不会有半透明的效果

第二种

使用 CGContextClipToMask 在图形上下问的某个矩形区域打上mask,这样做无论原先的图片有没有alpha通道,都可以实现半透明效果

位图永远是矩形形状的

iphone支持图片格式:

JPEG, GIF, PNG, TIF, ICO, GMP, XBM, and CUR.

创建一张图片,我们需要提供的一些东西

A bitmap data source

An optional Decode Array, 这个数组在渲染的时候会应用在每一个像素上面,是一个颜色变成另外一个颜色。

An interpolation setting, 布尔值,缩放图片的时候是否采用interpolation算法,具体这个算法不怎么了解

渲染意向

图片尺寸

Pixel Format:这个包括3个东西,

1,Bits per component,每一个component有多少Bits

2. Bits per pixel, 每一个像素占多少Bits

3. Bytes per row,每一个占多少Bytes

Color Spaces and Bitmap Layout,这里需要提供的几个东西

1,Whether a bitmap contains an alpha channel. 位图是否包含alpha通道

2。 color components是否已经乘以alpha value

3。数据格式是浮点数还是整型

Bitmap Layout是指color components的指是怎么指定的

下面的参数 bitmapInfo就是 Bitmap Layout

CGImageRef CGImageCreate (

   size_t width,

   size_t height,

   size_t bitsPerComponent,

   size_t bitsPerPixel,

   size_t bytesPerRow,

   CGColorSpaceRef colorspace,

   CGBitmapInfo bitmapInfo,

   CGDataProviderRef provider,

   const CGFloat decode[],

   bool shouldInterpolate,

   CGColorRenderingIntent intent

);

选择一个函数来创建图像

CGImageRef CGImageCreate (

   size_t width,

   size_t height,

   size_t bitsPerComponent,

   size_t bitsPerPixel,

   size_t bytesPerRow,

   CGColorSpaceRef colorspace,

   CGBitmapInfo bitmapInfo,

   CGDataProviderRef provider,

   const CGFloat decode[],

   bool shouldInterpolate,

   CGColorRenderingIntent intent

);

这个是比较万能的函数,但是提供的参数也是非常的多

CGImageRef CGImageCreateWithJPEGDataProvider (

   CGDataProviderRef source,

   const CGFloat decode[],

   bool shouldInterpolate,

   CGColorRenderingIntent intent

);

从jpeg源中创建图像

CGImageRef CGImageCreateWithPNGDataProvider (

   CGDataProviderRef source,

   const CGFloat decode[],

   bool shouldInterpolate,

   CGColorRenderingIntent intent

);

从png源中创建图像

CGImageRef CGImageCreateWithImageInRect (

   CGImageRef image,

   CGRect rect

);

从一张图片的某块区域创建图片,类似截图

CGImageRef CGImageSourceCreateImageAtIndex (

   CGImageSourceRef isrc,

   size_t index,

   CFDictionaryRef options

);

从一个图片源中创建图片,这个图片源可能包含不止一张图片,0表示第一张

CGImageRef CGImageSourceCreateThumbnailAtIndex (

   CGImageSourceRef isrc,

   size_t index,

   CFDictionaryRef options

);

创建一个缩略图从一个图片源中,这个图片源可能包含不止一张图片,0表示第一张

CGImageRef CGBitmapContextCreateImage (

   CGContextRef c

);

从一个图形上下文中创建图片

CGImageRef CGImageCreateCopy (

   CGImageRef image

);

拷贝一张图片

CGImageRef CGImageCreateCopyWithColorSpace (

   CGImageRef image,

   CGColorSpaceRef colorspace

);

拷贝一张图片,替换原来的颜色空间

从jpeg创建图片

void MyCreateAndDrawBitmapImage (CGContextRef myContext, 

                                CGRect myContextRect,

                                const char *filename);

{

    CGImageRef image;

    CGDataProviderRef provider;

    CFStringRef path;

    CFURLRef url;

 

    path = CFStringCreateWithCString (NULL, filename,

                        kCFStringEncodingUTF8);

    url = CFURLCreateWithFileSystemPath (NULL, path, // 2

                            kCFURLPOSIXPathStyle, NO);

    CFRelease(path);

    provider = CGDataProviderCreateWithURL (url);// 3

    CFRelease (url);

    image = CGImageCreateWithJPEGDataProvider (provider,// 4

                                    NULL,

                                    true,

                                    kCGRenderingIntentDefault);

    CGDataProviderRelease (provider);// 5

    CGContextDrawImage (myContext, myContextRect, image);// 6

    CGImageRelease (image);// 7

}

CGImageRef CGImageMaskCreate (

        size_t width,

        size_t height,

        size_t bitsPerComponent,

        size_t bitsPerPixel,

        size_t bytesPerRow,

        CGDataProviderRef provider,

        const float decode[],

        int shouldInterpolate

);

从一个已经存在的图形上下文中创建一个CGLayerRef

CGLayerRef CGLayerCreateWithContext (

   CGContextRef context,

   CGSize size,

   CFDictionaryRef auxiliaryInfo

);

CGSize CGLayerGetSize (

   CGLayerRef layer

);

然后从CGLayerRef中得到CGContextRef,就是图形上下文

CGContextRef CGLayerGetContext (

   CGLayerRef layer

);

接着在这个CGContextRef中绘画

Draw the CGLayer to the Destination Graphics Context

void CGContextDrawLayerInRect (

   CGContextRef context,

   CGRect rect,

   CGLayerRef layer

);

void CGContextDrawLayerAtPoint (

   CGContextRef context,

   CGPoint point,

   CGLayerRef layer

);

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息