iOS 开发交流

iOS核心图形之CGDataProvider

2019-02-28  本文已影响4人  Mr__Peng__
前言

CGDataProvider对象抽象了数据访问任务,消除了应用程序通过原始内存缓冲区管理数据的需要。

CGDataProvider 杂项功能
创建顺序访问数据提供程序
CGDataProviderRef CGDataProviderCreate (
   void *info,
   const CGDataProviderCallbacks *callbacks
);
创建直接访问数据提供程序
CGDataProviderRef CGDataProviderCreateDirectAccess (
   void *info,
   size_t size,
   const CGDataProviderDirectAccessCallbacks *callbacks
);
创建使用程序提供的数据的直接访问数据提供程序
CGDataProviderRef CGDataProviderCreateWithData(void *info, const void *data, size_t size, CGDataProviderReleaseDataCallback releaseData);
创建使用URL提供数据的直接访问数据提供程序
CGDataProviderRef CGDataProviderCreateWithURL(CFURLRef url);

使用此函数可创建直接访问数据提供程序,该提供程序从URL提供数据。当您使用直接访问数据提供程序提供Core Graphics 时,Core Graphics 将在整个块中从您的程序中获取数据

创建使用文件提供数据的直接访问数据提供程序
CGDataProviderRef CGDataProviderCreateWithFilename(const char *filename);
创建从CFData对象读取的数据提供程序。
CGDataProviderRef CGDataProviderCreateWithCFData(CFDataRef data);

以上所有方法都需要调用CGDataProviderReleaseCFRelease 释放对象

释放对象
void CGDataProviderRelease(CGDataProviderRef provider)
获取CGDataProvider typeID
CFTypeID CGDataProviderGetTypeID(void)
返回CGDataProvider的数据拷贝
CFDataRef CGDataProviderCopyData(CGDataProviderRef provider)
增加数据提供程序的保留计数
CGDataProviderRef CGDataProviderRetain(CGDataProviderRef provider); // 等同于CFRetain
创建顺序访问数据提供程序
CGDataProviderRef CGDataProviderCreateSequential(void *info, const CGDataProviderSequentialCallbacks *callbacks);
创建直接访问数据提供程序
CGDataProviderRef CGDataProviderCreateDirect(void *info, off_t size, const CGDataProviderDirectCallbacks *callbacks);
CallBacks
从提供程序数据流复制到核心图形缓冲区的回调函数
typedef size_t (*CGDataProviderGetBytesCallback)(void *info, void *buffer, size_t count);

Core Graphics准备好从提供程序数据流接收数据时,将调用函数。它应该将指定的字节数复制到缓冲区中

回调函数,释放与数据提供程序关联的任何私有数据或资源
typedef void (*CGDataProviderReleaseInfoCallback)(void *info)
一个回调函数,将数据流中的当前位置移回起始位置
typedef void (*CGDataProviderRewindCallback)(void *info)
一个回调函数,提供程序提供的数据流中的当前位置
void (*CGDataProviderSkipBytesCallback) (
   void *info,
   size_t count
);
一个回调函数,提供程序提供的数据流中的当前位置
typedef off_t (*CGDataProviderSkipForwardCallback)(void *info, off_t count);
一个回调函数,返回指向提供程序数据的通用指针
typedef const void * _Nullable (*CGDataProviderGetBytePointerCallback)(void *info);
回调函数,将数据从提供程序复制到Core Graphics缓冲区
typedef size_t (*CGDataProviderGetBytesAtOffsetCallback) (
   void *info,
   void *buffer,
   size_t offset,
   size_t count
);
一个回调函数,释放通过调用CGDataProviderGetBytePointerCallback获得的指针
typedef void (*CGDataProviderReleaseBytePointerCallback)(void *info, const void *pointer);
一个回调函数,释放提供给函数CGDataProviderCreateWithData的数据。
typedef void (*CGDataProviderReleaseDataCallback)(void *info, const void *data, size_t size);
回调函数,将数据从CGDataProvider复制到Core Graphics缓冲区
typedef size_t (*CGDataProviderGetBytesAtPositionCallback)(void *info, void *buffer, off_t pos, size_t cnt);
Data Types
CGDataProviderRef

概述:数据读取任务的抽象,它消除了管理原始内存缓冲区的需要
一些核心图形例程为程序提供数据块。与读取原始内存缓冲区不同,CGDataProviderRef类型的对象允许为Core Graphics函数提供数据。
CGDataProviderRef派生自CFTypeRef,并继承所有核心基础类型共有的属性

CGDataProviderCallbacks
struct CGDataProviderCallbacks {
   CGDataProviderGetBytesCallback getBytes;
   CGDataProviderSkipBytesCallback skipBytes;
   CGDataProviderRewindCallback rewind;
   CGDataProviderReleaseInfoCallback releaseProvider;
};
typedef struct CGDataProviderCallbacks CGDataProviderCallbacks;

一个结构体,该结构包含指向客户端定义的回调函数的指针,这些回调函数管理顺序访问数据提供程序的数据发送

CGDataProviderCallbacks结构指定的函数负责将数据顺序复制到内存缓冲区中,以供核心图形使用。这些函数还负责处理数据提供程序的基本内存管理。为函数CGDataProviderCreate提供CGDataProviderCallbacks结构,以创建顺序访问数据提供程序

CGDataProviderDirectAccessCallbacks

定义指向客户端定义的回调函数的指针,这些回调函数管理直接访问数据提供程序的数据发送

struct CGDataProviderDirectAccessCallbacks {
   CGDataProviderGetBytePointerCallback getBytePointer;
   CGDataProviderReleaseBytePointerCallback releaseBytePointer;
   CGDataProviderGetBytesAtOffsetCallback getBytes;
   CGDataProviderReleaseInfoCallback releaseProvider;
};
typedef struct CGDataProviderDirectAccessCallbacks  CGDataProviderDirectAccessCallbacks

为函数CGDataProviderCreateDirectAccess提供一个cgdataproviderdirectaccesscallback结构,以创建用于直接访问的数据提供程序。CGDataProviderDirectAccessCallbacks结构指定的函数负责每次将数据块复制到内存缓冲区中,供核心图形使用。这些函数还负责处理数据提供程序的基本内存管理。要使回调生效,getBytePointergetBytes参数之一必须是非空的。如果两者都是非空的,则使用getBytePointer访问数据。

CGDataProviderDirectCallbacks
struct CGDataProviderDirectCallbacks {
   CGDataProviderGetBytePointerCallback getBytePointer;
   CGDataProviderGetBytesAtPositionCallback getBytesAtPosition;
   CGDataProviderReleaseBytePointerCallback releaseBytePointer;
   CGDataProviderReleaseInfoCallback releaseInfo;
   unsigned int version;
};
typedef struct CGDataProviderDirectCallbacks  CGDataProviderDirectCallbacks

定义指向客户端定义的回调函数的指针,这些回调函数管理直接访问数据提供程序的数据发送。

为函数CGDataProviderCreateDirect提供一个CGDataProviderDirectCallbacks结构,以创建用于直接访问的数据提供程序。CGDataProviderDirectCallbacks结构指定的函数负责每次将数据块复制到内存缓冲区中,供核心图形使用。这些函数还负责处理数据提供程序的基本内存管理。要使回调生效,getBytePointergetBytesAtPosition参数之一必须是非空的。如果两者都是非空的,则使用getBytePointer访问数据

CGDataProviderSequentialCallbacks
struct CGDataProviderSequentialCallbacks {
   CGDataProviderGetBytesCallback getBytes;
   CGDataProviderRewindCallback rewind;
   CGDataProviderSkipForwardCallback skipForward;
   CGDataProviderReleaseInfoCallback releaseInfo;
   unsigned int version;
};
typedef struct CGDataProviderSequentialCallbacks  CGDataProviderSequentialCallbacks

定义一个结构,该结构包含指向客户端定义的回调函数的指针,这些回调函数管理顺序访问数据提供程序的数据发送

CGDataProviderSequentialCallbacks结构指定的函数负责将数据顺序复制到内存缓冲区中,以供核心图形使用。这些函数还负责处理数据提供程序的基本内存管理。为函数CGDataProviderCreateSequential提供CGDataProviderCallbacks结构,以创建顺序访问数据提供程序

上一篇 下一篇

猜你喜欢

热点阅读