Changeset 2988

Show
Ignore:
Timestamp:
06/20/05 03:07:29 (4 years ago)
Author:
morris
Message:

Add +imageNamed:

Clean up FHImage internals

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • Footagehead/trunk/FHController.m

    r2972 r2988  
    993993                         
    994994                        if(!image) { 
    995                                 image = [[FHImage alloc] initImageWithURL:url preferredSize:NSMakeSize(128.0, 128.0)]; 
     995                                image = [[FHImage alloc] initThumbnailWithURL:url preferredSize:NSMakeSize(128.0, 128.0)]; 
    996996                                 
    997997                                if(image) 
     
    10381038                        } else { 
    10391039                                // --- display error in window mode 
    1040                                 [_imageView setImage:[NSImage imageNamed:@"Error"]]; 
     1040                                [_imageView setImage:[FHImage imageNamed:@"Error"]]; 
    10411041                                [_rightStatusTextField setStringValue:[NSSWF:NSLS(@"error opening image", @"")]]; 
    10421042                        } 
     
    10521052                        } else { 
    10531053                                // --- display error in fullscreen 
    1054                                 [_fullscreenImageView setImage:[NSImage imageNamed:@"Error"]]; 
     1054                                [_fullscreenImageView setImage:[FHImage imageNamed:@"Error"]]; 
    10551055                                [self updateFullscreenStatus]; 
    10561056                        } 
  • Footagehead/trunk/FHImage.h

    r2948 r2988  
    3838 
    3939 
     40+ (id)imageNamed:(NSString *)name; 
     41 
    4042- (id)initImageWithImage:(NSImage *)image; 
    4143- (id)initImageWithURL:(ZAURL *)url; 
    42 - (id)initImageWithURL:(ZAURL *)url preferredSize:(NSSize)size; 
    4344- (id)initImageWithData:(NSData *)data; 
     45- (id)initThumbnailWithURL:(ZAURL *)url preferredSize:(NSSize)size; 
    4446 
    4547- (void)setFlipped:(BOOL)flipped; 
  • Footagehead/trunk/FHImage.m

    r2971 r2988  
    3838static BOOL                             FHImageUseCGImage = YES; 
    3939 
    40 static CGImageRef               FHImageLoadCGImageFromSource(CGImageSourceRef); 
    41 static CGImageRef               FHImageLoadCGImageThumbnailFromSource(CGImageSourceRef, float);  
    42  
    4340@end 
    4441 
     
    4643 
    4744@implementation FHImage 
     45 
     46+ (id)imageNamed:(NSString *)name { 
     47        NSImage         *image; 
     48 
     49        image = [NSImage imageNamed:name]; 
     50 
     51        if(!image) 
     52                return NULL; 
     53         
     54        return [[[self alloc] initImageWithImage:image] autorelease]; 
     55} 
     56 
     57 
     58 
     59#pragma mark - 
    4860 
    4961- (id)initImageWithImage:(NSImage *)image { 
     
    8294 
    8395 
    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 { 
    85151        self = [super init]; 
    86152         
    87153        if(FHImageUseCGImage && CGImageSourceCreateWithURL != NULL) { 
     154                NSDictionary            *options; 
    88155                CGImageSourceRef        imageSource; 
     156                CFNumberRef                     number; 
    89157                 
    90158                imageSource = CGImageSourceCreateWithURL((CFURLRef) [url URL], NULL); 
     
    96164                } 
    97165                 
    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); 
    99175                 
    100176                if(!_CGImage) { 
     
    125201 
    126202 
    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  
    175203#pragma mark - 
    176204 
     
    181209         
    182210        [super dealloc]; 
    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); 
    214211} 
    215212