| 84 | | - (id)initImageWithURL:(ZAURL *)url preferredSize:(NSSize)size { |
|---|
| | 96 | - (id)initImageWithData:(NSData *)data { |
|---|
| | 97 | self = [super init]; |
|---|
| | 98 | |
|---|
| | 99 | if(![self _initImageWithData:data]) { |
|---|
| | 100 | [self release]; |
|---|
| | 101 | |
|---|
| | 102 | return NULL; |
|---|
| | 103 | } |
|---|
| | 104 | |
|---|
| | 105 | return self; |
|---|
| | 106 | } |
|---|
| | 107 | |
|---|
| | 108 | |
|---|
| | 109 | |
|---|
| | 110 | - (BOOL)_initImageWithData:(NSData *)data { |
|---|
| | 111 | if(FHImageUseCGImage && CGImageSourceCreateWithData != NULL) { |
|---|
| | 112 | NSDictionary *options; |
|---|
| | 113 | CGImageSourceRef imageSource; |
|---|
| | 114 | |
|---|
| | 115 | imageSource = CGImageSourceCreateWithData((CFDataRef) data, NULL); |
|---|
| | 116 | |
|---|
| | 117 | if(!imageSource) |
|---|
| | 118 | return NO; |
|---|
| | 119 | |
|---|
| | 120 | options = [NSDictionary dictionaryWithObjectsAndKeys: |
|---|
| | 121 | (id) kCFBooleanTrue, (id) kCGImageSourceShouldCache, |
|---|
| | 122 | (id) kCFBooleanTrue, (id) kCGImageSourceShouldAllowFloat, |
|---|
| | 123 | NULL]; |
|---|
| | 124 | |
|---|
| | 125 | _CGImage = CGImageSourceCreateImageAtIndex(imageSource, 0, (CFDictionaryRef) options); |
|---|
| | 126 | |
|---|
| | 127 | if(!_CGImage) { |
|---|
| | 128 | CFRelease(imageSource); |
|---|
| | 129 | |
|---|
| | 130 | return NO; |
|---|
| | 131 | } |
|---|
| | 132 | |
|---|
| | 133 | _size = NSMakeSize(CGImageGetWidth(_CGImage), CGImageGetHeight(_CGImage)); |
|---|
| | 134 | |
|---|
| | 135 | CFRelease(imageSource); |
|---|
| | 136 | } else { |
|---|
| | 137 | _NSImage = [[NSImage alloc] initWithData:data]; |
|---|
| | 138 | |
|---|
| | 139 | if(!_NSImage) |
|---|
| | 140 | return NO; |
|---|
| | 141 | |
|---|
| | 142 | _size = [_NSImage size]; |
|---|
| | 143 | } |
|---|
| | 144 | |
|---|
| | 145 | return YES; |
|---|
| | 146 | } |
|---|
| | 147 | |
|---|
| | 148 | |
|---|
| | 149 | |
|---|
| | 150 | - (id)initThumbnailWithURL:(ZAURL *)url preferredSize:(NSSize)size { |
|---|
| 98 | | _CGImage = FHImageLoadCGImageThumbnailFromSource(imageSource, size.width); |
|---|
| | 166 | |
|---|
| | 167 | number = CFNumberCreate(NULL, kCFNumberFloatType, &size.width); |
|---|
| | 168 | options = [NSDictionary dictionaryWithObjectsAndKeys: |
|---|
| | 169 | (id) kCFBooleanTrue, (id) kCGImageSourceShouldCache, |
|---|
| | 170 | (id) kCFBooleanTrue, (id) kCGImageSourceCreateThumbnailFromImageIfAbsent, |
|---|
| | 171 | (id) number, (id) kCGImageSourceThumbnailMaxPixelSize, |
|---|
| | 172 | NULL]; |
|---|
| | 173 | |
|---|
| | 174 | _CGImage = CGImageSourceCreateThumbnailAtIndex(imageSource, 0, (CFDictionaryRef) options); |
|---|
| 127 | | - (id)initImageWithData:(NSData *)data { |
|---|
| 128 | | self = [super init]; |
|---|
| 129 | | |
|---|
| 130 | | if(![self _initImageWithData:data]) { |
|---|
| 131 | | [self release]; |
|---|
| 132 | | |
|---|
| 133 | | return NULL; |
|---|
| 134 | | } |
|---|
| 135 | | |
|---|
| 136 | | return self; |
|---|
| 137 | | } |
|---|
| 138 | | |
|---|
| 139 | | |
|---|
| 140 | | |
|---|
| 141 | | - (BOOL)_initImageWithData:(NSData *)data { |
|---|
| 142 | | if(FHImageUseCGImage && CGImageSourceCreateWithData != NULL) { |
|---|
| 143 | | CGImageSourceRef imageSource; |
|---|
| 144 | | |
|---|
| 145 | | imageSource = CGImageSourceCreateWithData((CFDataRef) data, NULL); |
|---|
| 146 | | |
|---|
| 147 | | if(!imageSource) |
|---|
| 148 | | return NO; |
|---|
| 149 | | |
|---|
| 150 | | _CGImage = FHImageLoadCGImageFromSource(imageSource); |
|---|
| 151 | | |
|---|
| 152 | | if(!_CGImage) { |
|---|
| 153 | | CFRelease(imageSource); |
|---|
| 154 | | |
|---|
| 155 | | return NO; |
|---|
| 156 | | } |
|---|
| 157 | | |
|---|
| 158 | | _size = NSMakeSize(CGImageGetWidth(_CGImage), CGImageGetHeight(_CGImage)); |
|---|
| 159 | | |
|---|
| 160 | | CFRelease(imageSource); |
|---|
| 161 | | } else { |
|---|
| 162 | | _NSImage = [[NSImage alloc] initWithData:data]; |
|---|
| 163 | | |
|---|
| 164 | | if(!_NSImage) |
|---|
| 165 | | return NO; |
|---|
| 166 | | |
|---|
| 167 | | _size = [_NSImage size]; |
|---|
| 168 | | } |
|---|
| 169 | | |
|---|
| 170 | | return YES; |
|---|
| 171 | | } |
|---|
| 172 | | |
|---|
| 173 | | |
|---|
| 174 | | |
|---|
| 183 | | } |
|---|
| 184 | | |
|---|
| 185 | | |
|---|
| 186 | | |
|---|
| 187 | | #pragma mark - |
|---|
| 188 | | |
|---|
| 189 | | static CGImageRef FHImageLoadCGImageFromSource(CGImageSourceRef imageSource) { |
|---|
| 190 | | NSDictionary *options; |
|---|
| 191 | | |
|---|
| 192 | | options = [NSDictionary dictionaryWithObjectsAndKeys: |
|---|
| 193 | | (id) kCFBooleanTrue, (id) kCGImageSourceShouldCache, |
|---|
| 194 | | (id) kCFBooleanTrue, (id) kCGImageSourceShouldAllowFloat, |
|---|
| 195 | | NULL]; |
|---|
| 196 | | |
|---|
| 197 | | return CGImageSourceCreateImageAtIndex(imageSource, 0, (CFDictionaryRef) options); |
|---|
| 198 | | } |
|---|
| 199 | | |
|---|
| 200 | | |
|---|
| 201 | | |
|---|
| 202 | | static CGImageRef FHImageLoadCGImageThumbnailFromSource(CGImageSourceRef imageSource, float width) { |
|---|
| 203 | | NSDictionary *options; |
|---|
| 204 | | CFNumberRef number; |
|---|
| 205 | | |
|---|
| 206 | | number = CFNumberCreate(NULL, kCFNumberFloatType, &width); |
|---|
| 207 | | options = [NSDictionary dictionaryWithObjectsAndKeys: |
|---|
| 208 | | (id) kCFBooleanTrue, (id) kCGImageSourceShouldCache, |
|---|
| 209 | | (id) kCFBooleanTrue, (id) kCGImageSourceCreateThumbnailFromImageIfAbsent, |
|---|
| 210 | | (id) number, (id) kCGImageSourceThumbnailMaxPixelSize, |
|---|
| 211 | | NULL]; |
|---|
| 212 | | |
|---|
| 213 | | return CGImageSourceCreateThumbnailAtIndex(imageSource, 0, (CFDictionaryRef) options); |
|---|