1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
use core_foundation::base::{CFRetain, CFTypeID};
use core_foundation::data::CFData;
use color_space::CGColorSpace;
use data_provider::CGDataProviderRef;
use libc::size_t;
use foreign_types::{ForeignType, ForeignTypeRef};
#[repr(C)]
pub enum CGImageAlphaInfo {
CGImageAlphaNone,
CGImageAlphaPremultipliedLast,
CGImageAlphaPremultipliedFirst,
CGImageAlphaLast,
CGImageAlphaFirst,
CGImageAlphaNoneSkipLast,
CGImageAlphaNoneSkipFirst,
CGImageAlphaOnly
}
#[repr(C)]
pub enum CGImageByteOrderInfo {
CGImageByteOrderMask = 0x7000,
CGImageByteOrder16Little = (1 << 12),
CGImageByteOrder32Little = (2 << 12),
CGImageByteOrder16Big = (3 << 12),
CGImageByteOrder32Big = (4 << 12)
}
foreign_type! {
#[doc(hidden)]
type CType = ::sys::CGImage;
fn drop = CGImageRelease;
fn clone = |p| CFRetain(p as *const _) as *mut _;
pub struct CGImage;
pub struct CGImageRef;
}
impl CGImage {
pub fn type_id() -> CFTypeID {
unsafe {
CGImageGetTypeID()
}
}
}
impl CGImageRef {
pub fn width(&self) -> size_t {
unsafe {
CGImageGetWidth(self.as_ptr())
}
}
pub fn height(&self) -> size_t {
unsafe {
CGImageGetHeight(self.as_ptr())
}
}
pub fn bits_per_component(&self) -> size_t {
unsafe {
CGImageGetBitsPerComponent(self.as_ptr())
}
}
pub fn bits_per_pixel(&self) -> size_t {
unsafe {
CGImageGetBitsPerPixel(self.as_ptr())
}
}
pub fn bytes_per_row(&self) -> size_t {
unsafe {
CGImageGetBytesPerRow(self.as_ptr())
}
}
pub fn color_space(&self) -> CGColorSpace {
unsafe {
let cs = CGImageGetColorSpace(self.as_ptr());
CFRetain(cs as *mut _);
CGColorSpace::from_ptr(cs)
}
}
pub fn data(&self) -> CFData {
let data_provider = unsafe {
CGDataProviderRef::from_ptr(CGImageGetDataProvider(self.as_ptr()))
};
data_provider.copy_data()
}
}
#[link(name = "CoreGraphics", kind = "framework")]
extern {
fn CGImageGetTypeID() -> CFTypeID;
fn CGImageGetWidth(image: ::sys::CGImageRef) -> size_t;
fn CGImageGetHeight(image: ::sys::CGImageRef) -> size_t;
fn CGImageGetBitsPerComponent(image: ::sys::CGImageRef) -> size_t;
fn CGImageGetBitsPerPixel(image: ::sys::CGImageRef) -> size_t;
fn CGImageGetBytesPerRow(image: ::sys::CGImageRef) -> size_t;
fn CGImageGetColorSpace(image: ::sys::CGImageRef) -> ::sys::CGColorSpaceRef;
fn CGImageGetDataProvider(image: ::sys::CGImageRef) -> ::sys::CGDataProviderRef;
fn CGImageRelease(image: ::sys::CGImageRef);
}