project_files/HedgewarsMobile/Classes/UIImageExtra.m
author dag10 <gottlieb.drew@gmail.com>
Wed, 16 Jan 2013 18:34:43 -0500
changeset 8393 85bd6c7b2641
parent 6832 fae8fd118da9
child 10108 c68cf030eded
permissions -rw-r--r--
Can now change theme for static and mission maps. Fixed mission map descriptions that had commas which broke them. Now, you must escape commas in map descriptions. Made bgwidget repaint on animation tick to avoid buffer-not-clearing issue with widgets that change overtop the background leaving a ghost image of the widget's previous state. Generated map is now the default map in the mapconfig widget.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
3829
81db3c85784b headers ftw, also right project file
koda
parents: 3778
diff changeset
     1
/*
81db3c85784b headers ftw, also right project file
koda
parents: 3778
diff changeset
     2
 * Hedgewars-iOS, a Hedgewars port for iOS devices
6700
e04da46ee43c the most important commit of the year
koda
parents: 6209
diff changeset
     3
 * Copyright (c) 2009-2012 Vittorio Giovara <vittorio.giovara@gmail.com>
3829
81db3c85784b headers ftw, also right project file
koda
parents: 3778
diff changeset
     4
 *
81db3c85784b headers ftw, also right project file
koda
parents: 3778
diff changeset
     5
 * This program is free software; you can redistribute it and/or modify
81db3c85784b headers ftw, also right project file
koda
parents: 3778
diff changeset
     6
 * it under the terms of the GNU General Public License as published by
81db3c85784b headers ftw, also right project file
koda
parents: 3778
diff changeset
     7
 * the Free Software Foundation; version 2 of the License
81db3c85784b headers ftw, also right project file
koda
parents: 3778
diff changeset
     8
 *
81db3c85784b headers ftw, also right project file
koda
parents: 3778
diff changeset
     9
 * This program is distributed in the hope that it will be useful,
81db3c85784b headers ftw, also right project file
koda
parents: 3778
diff changeset
    10
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
81db3c85784b headers ftw, also right project file
koda
parents: 3778
diff changeset
    11
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
81db3c85784b headers ftw, also right project file
koda
parents: 3778
diff changeset
    12
 * GNU General Public License for more details.
81db3c85784b headers ftw, also right project file
koda
parents: 3778
diff changeset
    13
 *
81db3c85784b headers ftw, also right project file
koda
parents: 3778
diff changeset
    14
 * You should have received a copy of the GNU General Public License
81db3c85784b headers ftw, also right project file
koda
parents: 3778
diff changeset
    15
 * along with this program; if not, write to the Free Software
81db3c85784b headers ftw, also right project file
koda
parents: 3778
diff changeset
    16
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
81db3c85784b headers ftw, also right project file
koda
parents: 3778
diff changeset
    17
 */
81db3c85784b headers ftw, also right project file
koda
parents: 3778
diff changeset
    18
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    19
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    20
#import "UIImageExtra.h"
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    21
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    22
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    23
@implementation UIImage (extra)
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3621
diff changeset
    24
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    25
-(UIImage *)scaleToSize:(CGSize) size {
6209
074ab6ebcb3e restore runtime compatibility with ios 3.2
koda
parents: 6080
diff changeset
    26
    // Create a bitmap graphics context; this will also set it as the current context
074ab6ebcb3e restore runtime compatibility with ios 3.2
koda
parents: 6080
diff changeset
    27
    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
074ab6ebcb3e restore runtime compatibility with ios 3.2
koda
parents: 6080
diff changeset
    28
    CGContextRef context = CGBitmapContextCreate(NULL, size.width, size.height, 8, 4 * size.width, colorSpace, kCGImageAlphaPremultipliedFirst);
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3621
diff changeset
    29
6209
074ab6ebcb3e restore runtime compatibility with ios 3.2
koda
parents: 6080
diff changeset
    30
    // draw the image inside the context
074ab6ebcb3e restore runtime compatibility with ios 3.2
koda
parents: 6080
diff changeset
    31
    CGFloat screenScale = [[UIScreen mainScreen] safeScale];
074ab6ebcb3e restore runtime compatibility with ios 3.2
koda
parents: 6080
diff changeset
    32
    CGContextDrawImage(context, CGRectMake(0, 0, size.width*screenScale, size.height*screenScale), self.CGImage);
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3621
diff changeset
    33
6209
074ab6ebcb3e restore runtime compatibility with ios 3.2
koda
parents: 6080
diff changeset
    34
    // Create bitmap image info from pixel data in current context
074ab6ebcb3e restore runtime compatibility with ios 3.2
koda
parents: 6080
diff changeset
    35
    CGImageRef imageRef = CGBitmapContextCreateImage(context);
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3621
diff changeset
    36
6209
074ab6ebcb3e restore runtime compatibility with ios 3.2
koda
parents: 6080
diff changeset
    37
    // Create a new UIImage object
074ab6ebcb3e restore runtime compatibility with ios 3.2
koda
parents: 6080
diff changeset
    38
    UIImage *resultImage;
074ab6ebcb3e restore runtime compatibility with ios 3.2
koda
parents: 6080
diff changeset
    39
    if ([UIImage respondsToSelector:@selector(imageWithCGImage:scale:orientation:)])
074ab6ebcb3e restore runtime compatibility with ios 3.2
koda
parents: 6080
diff changeset
    40
        resultImage = [UIImage imageWithCGImage:imageRef scale:screenScale orientation:UIImageOrientationUp];
074ab6ebcb3e restore runtime compatibility with ios 3.2
koda
parents: 6080
diff changeset
    41
    else
074ab6ebcb3e restore runtime compatibility with ios 3.2
koda
parents: 6080
diff changeset
    42
        resultImage = [UIImage imageWithCGImage:imageRef];
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3621
diff changeset
    43
6209
074ab6ebcb3e restore runtime compatibility with ios 3.2
koda
parents: 6080
diff changeset
    44
    // Release colorspace, context and bitmap information
074ab6ebcb3e restore runtime compatibility with ios 3.2
koda
parents: 6080
diff changeset
    45
    CGColorSpaceRelease(colorSpace);
074ab6ebcb3e restore runtime compatibility with ios 3.2
koda
parents: 6080
diff changeset
    46
    CGContextRelease(context);
074ab6ebcb3e restore runtime compatibility with ios 3.2
koda
parents: 6080
diff changeset
    47
    CFRelease(imageRef);
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3621
diff changeset
    48
6209
074ab6ebcb3e restore runtime compatibility with ios 3.2
koda
parents: 6080
diff changeset
    49
    return resultImage;
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    50
}
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    51
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    52
-(UIImage *)mergeWith:(UIImage *)secondImage atPoint:(CGPoint) secondImagePoint {
3778
2e61bb50cc57 add a nice group of hogs in lobby page
koda
parents: 3697
diff changeset
    53
    if (secondImage == nil) {
2e61bb50cc57 add a nice group of hogs in lobby page
koda
parents: 3697
diff changeset
    54
        DLog(@"Warning, secondImage == nil");
2e61bb50cc57 add a nice group of hogs in lobby page
koda
parents: 3697
diff changeset
    55
        return self;
2e61bb50cc57 add a nice group of hogs in lobby page
koda
parents: 3697
diff changeset
    56
    }
6209
074ab6ebcb3e restore runtime compatibility with ios 3.2
koda
parents: 6080
diff changeset
    57
    CGFloat screenScale = [[UIScreen mainScreen] safeScale];
4478
05029b4d8490 code cleanup
koda
parents: 4476
diff changeset
    58
    int w = self.size.width * screenScale;
05029b4d8490 code cleanup
koda
parents: 4476
diff changeset
    59
    int h = self.size.height * screenScale;
6080
ce02ddfe8aa1 on ipad2 and above animate the little hogs on game config and fix the hat display imaging
koda
parents: 6078
diff changeset
    60
    int yOffset = self.size.height - secondImage.size.height + secondImagePoint.y;
ce02ddfe8aa1 on ipad2 and above animate the little hogs on game config and fix the hat display imaging
koda
parents: 6078
diff changeset
    61
3948
24daa33a3114 some rethinking of initial menu presentation and initial orientation (also merging images should be threadsafe now)
koda
parents: 3910
diff changeset
    62
    if (w == 0 || h == 0) {
6080
ce02ddfe8aa1 on ipad2 and above animate the little hogs on game config and fix the hat display imaging
koda
parents: 6078
diff changeset
    63
        DLog(@"Cannot have 0 dimesions");
3948
24daa33a3114 some rethinking of initial menu presentation and initial orientation (also merging images should be threadsafe now)
koda
parents: 3910
diff changeset
    64
        return self;
24daa33a3114 some rethinking of initial menu presentation and initial orientation (also merging images should be threadsafe now)
koda
parents: 3910
diff changeset
    65
    }
6209
074ab6ebcb3e restore runtime compatibility with ios 3.2
koda
parents: 6080
diff changeset
    66
3573
c84067629035 complete configuration for schemes
koda
parents: 3547
diff changeset
    67
    // Create a bitmap graphics context; this will also set it as the current context
3948
24daa33a3114 some rethinking of initial menu presentation and initial orientation (also merging images should be threadsafe now)
koda
parents: 3910
diff changeset
    68
    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
6080
ce02ddfe8aa1 on ipad2 and above animate the little hogs on game config and fix the hat display imaging
koda
parents: 6078
diff changeset
    69
    CGContextRef context = CGBitmapContextCreate(NULL, w, h+yOffset, 8, 4 * w, colorSpace, kCGImageAlphaPremultipliedFirst);
6209
074ab6ebcb3e restore runtime compatibility with ios 3.2
koda
parents: 6080
diff changeset
    70
3948
24daa33a3114 some rethinking of initial menu presentation and initial orientation (also merging images should be threadsafe now)
koda
parents: 3910
diff changeset
    71
    // draw the two images in the current context
4476
4bf74e158f44 team selection completely refactored, now has animation and more performance
koda
parents: 4461
diff changeset
    72
    CGContextDrawImage(context, CGRectMake(0, 0, self.size.width*screenScale, self.size.height*screenScale), [self CGImage]);
4bf74e158f44 team selection completely refactored, now has animation and more performance
koda
parents: 4461
diff changeset
    73
    CGContextDrawImage(context, CGRectMake(secondImagePoint.x*screenScale, secondImagePoint.y*screenScale, secondImage.size.width*screenScale, secondImage.size.height*screenScale), [secondImage CGImage]);
6209
074ab6ebcb3e restore runtime compatibility with ios 3.2
koda
parents: 6080
diff changeset
    74
3948
24daa33a3114 some rethinking of initial menu presentation and initial orientation (also merging images should be threadsafe now)
koda
parents: 3910
diff changeset
    75
    // Create bitmap image info from pixel data in current context
24daa33a3114 some rethinking of initial menu presentation and initial orientation (also merging images should be threadsafe now)
koda
parents: 3910
diff changeset
    76
    CGImageRef imageRef = CGBitmapContextCreateImage(context);
6209
074ab6ebcb3e restore runtime compatibility with ios 3.2
koda
parents: 6080
diff changeset
    77
3948
24daa33a3114 some rethinking of initial menu presentation and initial orientation (also merging images should be threadsafe now)
koda
parents: 3910
diff changeset
    78
    // Create a new UIImage object
6209
074ab6ebcb3e restore runtime compatibility with ios 3.2
koda
parents: 6080
diff changeset
    79
    UIImage *resultImage;
074ab6ebcb3e restore runtime compatibility with ios 3.2
koda
parents: 6080
diff changeset
    80
    if ([UIImage respondsToSelector:@selector(imageWithCGImage:scale:orientation:)])
074ab6ebcb3e restore runtime compatibility with ios 3.2
koda
parents: 6080
diff changeset
    81
        resultImage = [UIImage imageWithCGImage:imageRef scale:screenScale orientation:UIImageOrientationUp];
074ab6ebcb3e restore runtime compatibility with ios 3.2
koda
parents: 6080
diff changeset
    82
    else
074ab6ebcb3e restore runtime compatibility with ios 3.2
koda
parents: 6080
diff changeset
    83
        resultImage = [UIImage imageWithCGImage:imageRef];
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3621
diff changeset
    84
3948
24daa33a3114 some rethinking of initial menu presentation and initial orientation (also merging images should be threadsafe now)
koda
parents: 3910
diff changeset
    85
    // Release colorspace, context and bitmap information
24daa33a3114 some rethinking of initial menu presentation and initial orientation (also merging images should be threadsafe now)
koda
parents: 3910
diff changeset
    86
    CGColorSpaceRelease(colorSpace);
24daa33a3114 some rethinking of initial menu presentation and initial orientation (also merging images should be threadsafe now)
koda
parents: 3910
diff changeset
    87
    CGContextRelease(context);
24daa33a3114 some rethinking of initial menu presentation and initial orientation (also merging images should be threadsafe now)
koda
parents: 3910
diff changeset
    88
    CFRelease(imageRef);
6209
074ab6ebcb3e restore runtime compatibility with ios 3.2
koda
parents: 6080
diff changeset
    89
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    90
    return resultImage;
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    91
}
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    92
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    93
-(id) initWithContentsOfFile:(NSString *)path andCutAt:(CGRect) rect {
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    94
    // load image from path
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    95
    UIImage *image = [[UIImage alloc] initWithContentsOfFile: path];
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3621
diff changeset
    96
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    97
    if (nil != image) {
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
    98
        // get its CGImage representation with a give size
3621
a8ddf681ba7d initial support for customizing weaponset
koda
parents: 3573
diff changeset
    99
        CGImageRef cgImage = CGImageCreateWithImageInRect([image CGImage], rect);
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3621
diff changeset
   100
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   101
        // clean memory
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   102
        [image release];
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3621
diff changeset
   103
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   104
        // create a UIImage from the CGImage (memory must be allocated already)
3621
a8ddf681ba7d initial support for customizing weaponset
koda
parents: 3573
diff changeset
   105
        UIImage *sprite = [self initWithCGImage:cgImage];
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3621
diff changeset
   106
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   107
        // clean memory
3621
a8ddf681ba7d initial support for customizing weaponset
koda
parents: 3573
diff changeset
   108
        CGImageRelease(cgImage);
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   109
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   110
        // return resulting image
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   111
        return sprite;
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   112
    } else {
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   113
        DLog(@"error - image == nil");
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   114
        return nil;
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   115
    }
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   116
}
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   117
3621
a8ddf681ba7d initial support for customizing weaponset
koda
parents: 3573
diff changeset
   118
-(UIImage *)cutAt:(CGRect) rect {
a8ddf681ba7d initial support for customizing weaponset
koda
parents: 3573
diff changeset
   119
    CGImageRef cgImage = CGImageCreateWithImageInRect([self CGImage], rect);
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3621
diff changeset
   120
3621
a8ddf681ba7d initial support for customizing weaponset
koda
parents: 3573
diff changeset
   121
    UIImage *res = [UIImage imageWithCGImage:cgImage];
a8ddf681ba7d initial support for customizing weaponset
koda
parents: 3573
diff changeset
   122
    CGImageRelease(cgImage);
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3621
diff changeset
   123
3621
a8ddf681ba7d initial support for customizing weaponset
koda
parents: 3573
diff changeset
   124
    return res;
a8ddf681ba7d initial support for customizing weaponset
koda
parents: 3573
diff changeset
   125
}
a8ddf681ba7d initial support for customizing weaponset
koda
parents: 3573
diff changeset
   126
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   127
-(UIImage *)convertToGrayScale {
3573
c84067629035 complete configuration for schemes
koda
parents: 3547
diff changeset
   128
    // Create image rectangle with current image width/height
c84067629035 complete configuration for schemes
koda
parents: 3547
diff changeset
   129
    CGRect imageRect = CGRectMake(0, 0, self.size.width, self.size.height);
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3621
diff changeset
   130
3573
c84067629035 complete configuration for schemes
koda
parents: 3547
diff changeset
   131
    // Grayscale color space
c84067629035 complete configuration for schemes
koda
parents: 3547
diff changeset
   132
    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceGray();
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3621
diff changeset
   133
3573
c84067629035 complete configuration for schemes
koda
parents: 3547
diff changeset
   134
    // Create bitmap content with current image size and grayscale colorspace
c84067629035 complete configuration for schemes
koda
parents: 3547
diff changeset
   135
    CGContextRef context = CGBitmapContextCreate(nil, self.size.width, self.size.height, 8, 0, colorSpace, kCGImageAlphaNone);
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3621
diff changeset
   136
3573
c84067629035 complete configuration for schemes
koda
parents: 3547
diff changeset
   137
    // Draw image into current context, with specified rectangle
c84067629035 complete configuration for schemes
koda
parents: 3547
diff changeset
   138
    // using previously defined context (with grayscale colorspace)
c84067629035 complete configuration for schemes
koda
parents: 3547
diff changeset
   139
    CGContextDrawImage(context, imageRect, [self CGImage]);
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3621
diff changeset
   140
3573
c84067629035 complete configuration for schemes
koda
parents: 3547
diff changeset
   141
    // Create bitmap image info from pixel data in current context
c84067629035 complete configuration for schemes
koda
parents: 3547
diff changeset
   142
    CGImageRef imageRef = CGBitmapContextCreateImage(context);
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3621
diff changeset
   143
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3621
diff changeset
   144
    // Create a new UIImage object
3573
c84067629035 complete configuration for schemes
koda
parents: 3547
diff changeset
   145
    UIImage *newImage = [UIImage imageWithCGImage:imageRef];
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3621
diff changeset
   146
3573
c84067629035 complete configuration for schemes
koda
parents: 3547
diff changeset
   147
    // Release colorspace, context and bitmap information
3978
9660600e43cb fix some glitches
koda
parents: 3948
diff changeset
   148
    CFRelease(imageRef);
3573
c84067629035 complete configuration for schemes
koda
parents: 3547
diff changeset
   149
    CGContextRelease(context);
3978
9660600e43cb fix some glitches
koda
parents: 3948
diff changeset
   150
    CGColorSpaceRelease(colorSpace);
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3621
diff changeset
   151
3573
c84067629035 complete configuration for schemes
koda
parents: 3547
diff changeset
   152
    // Return the new grayscale image
c84067629035 complete configuration for schemes
koda
parents: 3547
diff changeset
   153
    return newImage;
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   154
}
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   155
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   156
// by http://iphonedevelopertips.com/cocoa/how-to-mask-an-image.html turned into a category by koda
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   157
-(UIImage*) maskImageWith:(UIImage *)maskImage {
3573
c84067629035 complete configuration for schemes
koda
parents: 3547
diff changeset
   158
    // prepare the reference image
c84067629035 complete configuration for schemes
koda
parents: 3547
diff changeset
   159
    CGImageRef maskRef = [maskImage CGImage];
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3621
diff changeset
   160
3573
c84067629035 complete configuration for schemes
koda
parents: 3547
diff changeset
   161
    // create the mask using parameters of the mask reference
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   162
    CGImageRef mask = CGImageMaskCreate(CGImageGetWidth(maskRef),
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   163
                                        CGImageGetHeight(maskRef),
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   164
                                        CGImageGetBitsPerComponent(maskRef),
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   165
                                        CGImageGetBitsPerPixel(maskRef),
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   166
                                        CGImageGetBytesPerRow(maskRef),
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   167
                                        CGImageGetDataProvider(maskRef), NULL, false);
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3621
diff changeset
   168
3573
c84067629035 complete configuration for schemes
koda
parents: 3547
diff changeset
   169
    // create an image in the current context
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   170
    CGImageRef masked = CGImageCreateWithMask([self CGImage], mask);
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   171
    CGImageRelease(mask);
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3621
diff changeset
   172
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   173
    UIImage* retImage = [UIImage imageWithCGImage:masked];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   174
    CGImageRelease(masked);
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3621
diff changeset
   175
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   176
    return retImage;
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   177
}
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   178
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   179
// by http://blog.sallarp.com/iphone-uiimage-round-corners/ turned into a category by koda
3573
c84067629035 complete configuration for schemes
koda
parents: 3547
diff changeset
   180
void addRoundedRectToPath(CGContextRef context, CGRect rect, CGFloat ovalWidth, CGFloat ovalHeight) {
c84067629035 complete configuration for schemes
koda
parents: 3547
diff changeset
   181
    CGFloat fw, fh;
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   182
    if (ovalWidth == 0 || ovalHeight == 0) {
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   183
        CGContextAddRect(context, rect);
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   184
        return;
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   185
    }
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   186
    CGContextSaveGState(context);
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   187
    CGContextTranslateCTM (context, CGRectGetMinX(rect), CGRectGetMinY(rect));
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   188
    CGContextScaleCTM (context, ovalWidth, ovalHeight);
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   189
    fw = CGRectGetWidth (rect) / ovalWidth;
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   190
    fh = CGRectGetHeight (rect) / ovalHeight;
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   191
    CGContextMoveToPoint(context, fw, fh/2);
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   192
    CGContextAddArcToPoint(context, fw, fh, fw/2, fh, 1);
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   193
    CGContextAddArcToPoint(context, 0, fh, 0, fh/2, 1);
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   194
    CGContextAddArcToPoint(context, 0, 0, fw/2, 0, 1);
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   195
    CGContextAddArcToPoint(context, fw, 0, fw, fh/2, 1);
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   196
    CGContextClosePath(context);
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   197
    CGContextRestoreGState(context);
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   198
}
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   199
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3621
diff changeset
   200
-(UIImage *)makeRoundCornersOfSize:(CGSize) sizewh {
3573
c84067629035 complete configuration for schemes
koda
parents: 3547
diff changeset
   201
    CGFloat cornerWidth = sizewh.width;
c84067629035 complete configuration for schemes
koda
parents: 3547
diff changeset
   202
    CGFloat cornerHeight = sizewh.height;
6209
074ab6ebcb3e restore runtime compatibility with ios 3.2
koda
parents: 6080
diff changeset
   203
    CGFloat screenScale = [[UIScreen mainScreen] safeScale];
4476
4bf74e158f44 team selection completely refactored, now has animation and more performance
koda
parents: 4461
diff changeset
   204
    CGFloat w = self.size.width * screenScale;
4bf74e158f44 team selection completely refactored, now has animation and more performance
koda
parents: 4461
diff changeset
   205
    CGFloat h = self.size.height * screenScale;
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3621
diff changeset
   206
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   207
    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   208
    CGContextRef context = CGBitmapContextCreate(NULL, w, h, 8, 4 * w, colorSpace, kCGImageAlphaPremultipliedFirst);
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3621
diff changeset
   209
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   210
    CGContextBeginPath(context);
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   211
    CGRect rect = CGRectMake(0, 0, w, h);
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   212
    addRoundedRectToPath(context, rect, cornerWidth, cornerHeight);
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   213
    CGContextClosePath(context);
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   214
    CGContextClip(context);
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3621
diff changeset
   215
3573
c84067629035 complete configuration for schemes
koda
parents: 3547
diff changeset
   216
    CGContextDrawImage(context, CGRectMake(0, 0, w, h), [self CGImage]);
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3621
diff changeset
   217
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   218
    CGImageRef imageMasked = CGBitmapContextCreateImage(context);
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   219
    CGContextRelease(context);
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   220
    CGColorSpaceRelease(colorSpace);
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3621
diff changeset
   221
6209
074ab6ebcb3e restore runtime compatibility with ios 3.2
koda
parents: 6080
diff changeset
   222
    UIImage *resultImage;
074ab6ebcb3e restore runtime compatibility with ios 3.2
koda
parents: 6080
diff changeset
   223
    if ([UIImage respondsToSelector:@selector(imageWithCGImage:scale:orientation:)])
074ab6ebcb3e restore runtime compatibility with ios 3.2
koda
parents: 6080
diff changeset
   224
        resultImage = [UIImage imageWithCGImage:imageMasked scale:screenScale orientation:UIImageOrientationUp];
074ab6ebcb3e restore runtime compatibility with ios 3.2
koda
parents: 6080
diff changeset
   225
    else
074ab6ebcb3e restore runtime compatibility with ios 3.2
koda
parents: 6080
diff changeset
   226
        resultImage = [UIImage imageWithCGImage:imageMasked];
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   227
    CGImageRelease(imageMasked);
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3621
diff changeset
   228
6209
074ab6ebcb3e restore runtime compatibility with ios 3.2
koda
parents: 6080
diff changeset
   229
    return resultImage;
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   230
}
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   231
3903
db01c37494af pimp-my-savagame-table
koda
parents: 3829
diff changeset
   232
// by http://www.sixtemia.com/journal/2010/06/23/uiimage-negative-color-effect/
db01c37494af pimp-my-savagame-table
koda
parents: 3829
diff changeset
   233
-(UIImage *)convertToNegative {
db01c37494af pimp-my-savagame-table
koda
parents: 3829
diff changeset
   234
    UIGraphicsBeginImageContext(self.size);
db01c37494af pimp-my-savagame-table
koda
parents: 3829
diff changeset
   235
    CGContextSetBlendMode(UIGraphicsGetCurrentContext(), kCGBlendModeCopy);
db01c37494af pimp-my-savagame-table
koda
parents: 3829
diff changeset
   236
    [self drawInRect:CGRectMake(0, 0, self.size.width, self.size.height)];
db01c37494af pimp-my-savagame-table
koda
parents: 3829
diff changeset
   237
    CGContextSetBlendMode(UIGraphicsGetCurrentContext(), kCGBlendModeDifference);
db01c37494af pimp-my-savagame-table
koda
parents: 3829
diff changeset
   238
    CGContextSetFillColorWithColor(UIGraphicsGetCurrentContext(),[UIColor whiteColor].CGColor);
db01c37494af pimp-my-savagame-table
koda
parents: 3829
diff changeset
   239
    CGContextFillRect(UIGraphicsGetCurrentContext(), CGRectMake(0, 0, self.size.width, self.size.height));
3948
24daa33a3114 some rethinking of initial menu presentation and initial orientation (also merging images should be threadsafe now)
koda
parents: 3910
diff changeset
   240
    // create an image from the current contex (not thread safe)
3903
db01c37494af pimp-my-savagame-table
koda
parents: 3829
diff changeset
   241
    UIImage *result = UIGraphicsGetImageFromCurrentImageContext();
db01c37494af pimp-my-savagame-table
koda
parents: 3829
diff changeset
   242
    UIGraphicsEndImageContext();
db01c37494af pimp-my-savagame-table
koda
parents: 3829
diff changeset
   243
    return result;
db01c37494af pimp-my-savagame-table
koda
parents: 3829
diff changeset
   244
}
db01c37494af pimp-my-savagame-table
koda
parents: 3829
diff changeset
   245
3910
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents: 3903
diff changeset
   246
+(UIImage *)whiteImage:(CGSize) ofSize {
4356
d1d26f8963a3 update some files for new graphics and new ios4.2
koda
parents: 3978
diff changeset
   247
    CGFloat w = ofSize.width;
d1d26f8963a3 update some files for new graphics and new ios4.2
koda
parents: 3978
diff changeset
   248
    CGFloat h = ofSize.height;
4478
05029b4d8490 code cleanup
koda
parents: 4476
diff changeset
   249
    DLog(@"w: %f, h: %f", w, h);
3910
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents: 3903
diff changeset
   250
4356
d1d26f8963a3 update some files for new graphics and new ios4.2
koda
parents: 3978
diff changeset
   251
    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
d1d26f8963a3 update some files for new graphics and new ios4.2
koda
parents: 3978
diff changeset
   252
    CGContextRef context = CGBitmapContextCreate(NULL, w, h, 8, 4 * w, colorSpace, kCGImageAlphaPremultipliedFirst);
d1d26f8963a3 update some files for new graphics and new ios4.2
koda
parents: 3978
diff changeset
   253
d1d26f8963a3 update some files for new graphics and new ios4.2
koda
parents: 3978
diff changeset
   254
    CGContextBeginPath(context);
3910
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents: 3903
diff changeset
   255
    CGContextSetRGBFillColor(context, 1.0, 1.0, 1.0, 1.0);
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents: 3903
diff changeset
   256
    CGContextFillRect(context,CGRectMake(0,0,ofSize.width,ofSize.height));
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents: 3903
diff changeset
   257
4356
d1d26f8963a3 update some files for new graphics and new ios4.2
koda
parents: 3978
diff changeset
   258
    CGImageRef image = CGBitmapContextCreateImage(context);
d1d26f8963a3 update some files for new graphics and new ios4.2
koda
parents: 3978
diff changeset
   259
    CGContextRelease(context);
d1d26f8963a3 update some files for new graphics and new ios4.2
koda
parents: 3978
diff changeset
   260
    CGColorSpaceRelease(colorSpace);
d1d26f8963a3 update some files for new graphics and new ios4.2
koda
parents: 3978
diff changeset
   261
d1d26f8963a3 update some files for new graphics and new ios4.2
koda
parents: 3978
diff changeset
   262
    UIImage *bkgImg = [UIImage imageWithCGImage:image];
d1d26f8963a3 update some files for new graphics and new ios4.2
koda
parents: 3978
diff changeset
   263
    CGImageRelease(image);
3910
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents: 3903
diff changeset
   264
    return bkgImg;
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents: 3903
diff changeset
   265
}
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents: 3903
diff changeset
   266
6209
074ab6ebcb3e restore runtime compatibility with ios 3.2
koda
parents: 6080
diff changeset
   267
+(UIImage *)drawHogsRepeated:(NSInteger) manyTimes {
074ab6ebcb3e restore runtime compatibility with ios 3.2
koda
parents: 6080
diff changeset
   268
    NSString *imgString = [[NSString alloc] initWithFormat:@"%@/hedgehog.png",[[NSBundle mainBundle] resourcePath]];
074ab6ebcb3e restore runtime compatibility with ios 3.2
koda
parents: 6080
diff changeset
   269
    UIImage *hogSprite = [[UIImage alloc] initWithContentsOfFile:imgString];
074ab6ebcb3e restore runtime compatibility with ios 3.2
koda
parents: 6080
diff changeset
   270
    [imgString release];
074ab6ebcb3e restore runtime compatibility with ios 3.2
koda
parents: 6080
diff changeset
   271
    CGFloat screenScale = [[UIScreen mainScreen] safeScale];
074ab6ebcb3e restore runtime compatibility with ios 3.2
koda
parents: 6080
diff changeset
   272
    int w = hogSprite.size.width * screenScale;
074ab6ebcb3e restore runtime compatibility with ios 3.2
koda
parents: 6080
diff changeset
   273
    int h = hogSprite.size.height * screenScale;
074ab6ebcb3e restore runtime compatibility with ios 3.2
koda
parents: 6080
diff changeset
   274
    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
074ab6ebcb3e restore runtime compatibility with ios 3.2
koda
parents: 6080
diff changeset
   275
    CGContextRef context = CGBitmapContextCreate(NULL, w * 3, h, 8, 4 * w * 3, colorSpace, kCGImageAlphaPremultipliedFirst);
074ab6ebcb3e restore runtime compatibility with ios 3.2
koda
parents: 6080
diff changeset
   276
074ab6ebcb3e restore runtime compatibility with ios 3.2
koda
parents: 6080
diff changeset
   277
    // draw the two images in the current context
074ab6ebcb3e restore runtime compatibility with ios 3.2
koda
parents: 6080
diff changeset
   278
    for (int i = 0; i < manyTimes; i++)
074ab6ebcb3e restore runtime compatibility with ios 3.2
koda
parents: 6080
diff changeset
   279
        CGContextDrawImage(context, CGRectMake(i*8*screenScale, 0, w, h), [hogSprite CGImage]);
074ab6ebcb3e restore runtime compatibility with ios 3.2
koda
parents: 6080
diff changeset
   280
    [hogSprite release];
074ab6ebcb3e restore runtime compatibility with ios 3.2
koda
parents: 6080
diff changeset
   281
074ab6ebcb3e restore runtime compatibility with ios 3.2
koda
parents: 6080
diff changeset
   282
    // Create bitmap image info from pixel data in current context
074ab6ebcb3e restore runtime compatibility with ios 3.2
koda
parents: 6080
diff changeset
   283
    CGImageRef imageRef = CGBitmapContextCreateImage(context);
074ab6ebcb3e restore runtime compatibility with ios 3.2
koda
parents: 6080
diff changeset
   284
074ab6ebcb3e restore runtime compatibility with ios 3.2
koda
parents: 6080
diff changeset
   285
    // Create a new UIImage object
074ab6ebcb3e restore runtime compatibility with ios 3.2
koda
parents: 6080
diff changeset
   286
    UIImage *resultImage;
074ab6ebcb3e restore runtime compatibility with ios 3.2
koda
parents: 6080
diff changeset
   287
    if ([UIImage respondsToSelector:@selector(imageWithCGImage:scale:orientation:)])
074ab6ebcb3e restore runtime compatibility with ios 3.2
koda
parents: 6080
diff changeset
   288
        resultImage = [UIImage imageWithCGImage:imageRef scale:screenScale orientation:UIImageOrientationUp];
074ab6ebcb3e restore runtime compatibility with ios 3.2
koda
parents: 6080
diff changeset
   289
    else
074ab6ebcb3e restore runtime compatibility with ios 3.2
koda
parents: 6080
diff changeset
   290
        resultImage = [UIImage imageWithCGImage:imageRef];
074ab6ebcb3e restore runtime compatibility with ios 3.2
koda
parents: 6080
diff changeset
   291
074ab6ebcb3e restore runtime compatibility with ios 3.2
koda
parents: 6080
diff changeset
   292
    // Release colorspace, context and bitmap information
074ab6ebcb3e restore runtime compatibility with ios 3.2
koda
parents: 6080
diff changeset
   293
    CGColorSpaceRelease(colorSpace);
074ab6ebcb3e restore runtime compatibility with ios 3.2
koda
parents: 6080
diff changeset
   294
    CGContextRelease(context);
074ab6ebcb3e restore runtime compatibility with ios 3.2
koda
parents: 6080
diff changeset
   295
    CFRelease(imageRef);
074ab6ebcb3e restore runtime compatibility with ios 3.2
koda
parents: 6080
diff changeset
   296
074ab6ebcb3e restore runtime compatibility with ios 3.2
koda
parents: 6080
diff changeset
   297
    return resultImage;
074ab6ebcb3e restore runtime compatibility with ios 3.2
koda
parents: 6080
diff changeset
   298
}
074ab6ebcb3e restore runtime compatibility with ios 3.2
koda
parents: 6080
diff changeset
   299
6078
8c0cc07731e5 headers cleanup, converted some function-only sources into proper class method files, more use of OOP power, removed some 'respondsToSelector' calls, moved defines into their own header, more use of objc categories
koda
parents: 5503
diff changeset
   300
// this routine checks for the PNG size without loading it in memory
8c0cc07731e5 headers cleanup, converted some function-only sources into proper class method files, more use of OOP power, removed some 'respondsToSelector' calls, moved defines into their own header, more use of objc categories
koda
parents: 5503
diff changeset
   301
// https://github.com/steipete/PSFramework/blob/master/PSFramework%20Version%200.3/PhotoshopFramework/PSMetaDataFunctions.m
8c0cc07731e5 headers cleanup, converted some function-only sources into proper class method files, more use of OOP power, removed some 'respondsToSelector' calls, moved defines into their own header, more use of objc categories
koda
parents: 5503
diff changeset
   302
+(CGSize) imageSizeFromMetadataOf:(NSString *)aFileName {
8c0cc07731e5 headers cleanup, converted some function-only sources into proper class method files, more use of OOP power, removed some 'respondsToSelector' calls, moved defines into their own header, more use of objc categories
koda
parents: 5503
diff changeset
   303
    // File Name to C String.
8c0cc07731e5 headers cleanup, converted some function-only sources into proper class method files, more use of OOP power, removed some 'respondsToSelector' calls, moved defines into their own header, more use of objc categories
koda
parents: 5503
diff changeset
   304
    const char *fileName = [aFileName UTF8String];
8c0cc07731e5 headers cleanup, converted some function-only sources into proper class method files, more use of OOP power, removed some 'respondsToSelector' calls, moved defines into their own header, more use of objc categories
koda
parents: 5503
diff changeset
   305
    // source file
8c0cc07731e5 headers cleanup, converted some function-only sources into proper class method files, more use of OOP power, removed some 'respondsToSelector' calls, moved defines into their own header, more use of objc categories
koda
parents: 5503
diff changeset
   306
    FILE *infile = fopen(fileName, "rb");
8c0cc07731e5 headers cleanup, converted some function-only sources into proper class method files, more use of OOP power, removed some 'respondsToSelector' calls, moved defines into their own header, more use of objc categories
koda
parents: 5503
diff changeset
   307
    if (infile == NULL) {
8c0cc07731e5 headers cleanup, converted some function-only sources into proper class method files, more use of OOP power, removed some 'respondsToSelector' calls, moved defines into their own header, more use of objc categories
koda
parents: 5503
diff changeset
   308
        DLog(@"Can't open the file: %@", aFileName);
8c0cc07731e5 headers cleanup, converted some function-only sources into proper class method files, more use of OOP power, removed some 'respondsToSelector' calls, moved defines into their own header, more use of objc categories
koda
parents: 5503
diff changeset
   309
        return CGSizeZero;
8c0cc07731e5 headers cleanup, converted some function-only sources into proper class method files, more use of OOP power, removed some 'respondsToSelector' calls, moved defines into their own header, more use of objc categories
koda
parents: 5503
diff changeset
   310
    }
8c0cc07731e5 headers cleanup, converted some function-only sources into proper class method files, more use of OOP power, removed some 'respondsToSelector' calls, moved defines into their own header, more use of objc categories
koda
parents: 5503
diff changeset
   311
8c0cc07731e5 headers cleanup, converted some function-only sources into proper class method files, more use of OOP power, removed some 'respondsToSelector' calls, moved defines into their own header, more use of objc categories
koda
parents: 5503
diff changeset
   312
    // Bytes Buffer.
8c0cc07731e5 headers cleanup, converted some function-only sources into proper class method files, more use of OOP power, removed some 'respondsToSelector' calls, moved defines into their own header, more use of objc categories
koda
parents: 5503
diff changeset
   313
    unsigned char buffer[30];
8c0cc07731e5 headers cleanup, converted some function-only sources into proper class method files, more use of OOP power, removed some 'respondsToSelector' calls, moved defines into their own header, more use of objc categories
koda
parents: 5503
diff changeset
   314
    // Grab Only First Bytes.
8c0cc07731e5 headers cleanup, converted some function-only sources into proper class method files, more use of OOP power, removed some 'respondsToSelector' calls, moved defines into their own header, more use of objc categories
koda
parents: 5503
diff changeset
   315
    fread(buffer, 1, 30, infile);
8c0cc07731e5 headers cleanup, converted some function-only sources into proper class method files, more use of OOP power, removed some 'respondsToSelector' calls, moved defines into their own header, more use of objc categories
koda
parents: 5503
diff changeset
   316
    // Close File.
8c0cc07731e5 headers cleanup, converted some function-only sources into proper class method files, more use of OOP power, removed some 'respondsToSelector' calls, moved defines into their own header, more use of objc categories
koda
parents: 5503
diff changeset
   317
    fclose(infile);
8c0cc07731e5 headers cleanup, converted some function-only sources into proper class method files, more use of OOP power, removed some 'respondsToSelector' calls, moved defines into their own header, more use of objc categories
koda
parents: 5503
diff changeset
   318
8c0cc07731e5 headers cleanup, converted some function-only sources into proper class method files, more use of OOP power, removed some 'respondsToSelector' calls, moved defines into their own header, more use of objc categories
koda
parents: 5503
diff changeset
   319
    // PNG Signature.
8c0cc07731e5 headers cleanup, converted some function-only sources into proper class method files, more use of OOP power, removed some 'respondsToSelector' calls, moved defines into their own header, more use of objc categories
koda
parents: 5503
diff changeset
   320
    unsigned char png_signature[8] = {137, 80, 78, 71, 13, 10, 26, 10};
8c0cc07731e5 headers cleanup, converted some function-only sources into proper class method files, more use of OOP power, removed some 'respondsToSelector' calls, moved defines into their own header, more use of objc categories
koda
parents: 5503
diff changeset
   321
8c0cc07731e5 headers cleanup, converted some function-only sources into proper class method files, more use of OOP power, removed some 'respondsToSelector' calls, moved defines into their own header, more use of objc categories
koda
parents: 5503
diff changeset
   322
    // Compare File signature.
8c0cc07731e5 headers cleanup, converted some function-only sources into proper class method files, more use of OOP power, removed some 'respondsToSelector' calls, moved defines into their own header, more use of objc categories
koda
parents: 5503
diff changeset
   323
    if ((int)(memcmp(&buffer[0], &png_signature[0], 8))) {
8c0cc07731e5 headers cleanup, converted some function-only sources into proper class method files, more use of OOP power, removed some 'respondsToSelector' calls, moved defines into their own header, more use of objc categories
koda
parents: 5503
diff changeset
   324
        DLog(@"The file (%@) is not a PNG file", aFileName);
8c0cc07731e5 headers cleanup, converted some function-only sources into proper class method files, more use of OOP power, removed some 'respondsToSelector' calls, moved defines into their own header, more use of objc categories
koda
parents: 5503
diff changeset
   325
        return CGSizeZero;
8c0cc07731e5 headers cleanup, converted some function-only sources into proper class method files, more use of OOP power, removed some 'respondsToSelector' calls, moved defines into their own header, more use of objc categories
koda
parents: 5503
diff changeset
   326
    }
8c0cc07731e5 headers cleanup, converted some function-only sources into proper class method files, more use of OOP power, removed some 'respondsToSelector' calls, moved defines into their own header, more use of objc categories
koda
parents: 5503
diff changeset
   327
8c0cc07731e5 headers cleanup, converted some function-only sources into proper class method files, more use of OOP power, removed some 'respondsToSelector' calls, moved defines into their own header, more use of objc categories
koda
parents: 5503
diff changeset
   328
    // Calc Sizes. Isolate only four bytes of each size (width, height).
8c0cc07731e5 headers cleanup, converted some function-only sources into proper class method files, more use of OOP power, removed some 'respondsToSelector' calls, moved defines into their own header, more use of objc categories
koda
parents: 5503
diff changeset
   329
    int width[4];
8c0cc07731e5 headers cleanup, converted some function-only sources into proper class method files, more use of OOP power, removed some 'respondsToSelector' calls, moved defines into their own header, more use of objc categories
koda
parents: 5503
diff changeset
   330
    int height[4];
8c0cc07731e5 headers cleanup, converted some function-only sources into proper class method files, more use of OOP power, removed some 'respondsToSelector' calls, moved defines into their own header, more use of objc categories
koda
parents: 5503
diff changeset
   331
    for (int d = 16; d < (16 + 4); d++) {
8c0cc07731e5 headers cleanup, converted some function-only sources into proper class method files, more use of OOP power, removed some 'respondsToSelector' calls, moved defines into their own header, more use of objc categories
koda
parents: 5503
diff changeset
   332
        width[d-16] = buffer[d];
8c0cc07731e5 headers cleanup, converted some function-only sources into proper class method files, more use of OOP power, removed some 'respondsToSelector' calls, moved defines into their own header, more use of objc categories
koda
parents: 5503
diff changeset
   333
        height[d-16] = buffer[d+4];
8c0cc07731e5 headers cleanup, converted some function-only sources into proper class method files, more use of OOP power, removed some 'respondsToSelector' calls, moved defines into their own header, more use of objc categories
koda
parents: 5503
diff changeset
   334
    }
8c0cc07731e5 headers cleanup, converted some function-only sources into proper class method files, more use of OOP power, removed some 'respondsToSelector' calls, moved defines into their own header, more use of objc categories
koda
parents: 5503
diff changeset
   335
8c0cc07731e5 headers cleanup, converted some function-only sources into proper class method files, more use of OOP power, removed some 'respondsToSelector' calls, moved defines into their own header, more use of objc categories
koda
parents: 5503
diff changeset
   336
    // Convert bytes to Long (Integer)
8c0cc07731e5 headers cleanup, converted some function-only sources into proper class method files, more use of OOP power, removed some 'respondsToSelector' calls, moved defines into their own header, more use of objc categories
koda
parents: 5503
diff changeset
   337
    long resultWidth = (width[0] << (int)24) | (width[1] << (int)16) | (width[2] << (int)8) | width[3];
8c0cc07731e5 headers cleanup, converted some function-only sources into proper class method files, more use of OOP power, removed some 'respondsToSelector' calls, moved defines into their own header, more use of objc categories
koda
parents: 5503
diff changeset
   338
    long resultHeight = (height[0] << (int)24) | (height[1] << (int)16) | (height[2] << (int)8) | height[3];
8c0cc07731e5 headers cleanup, converted some function-only sources into proper class method files, more use of OOP power, removed some 'respondsToSelector' calls, moved defines into their own header, more use of objc categories
koda
parents: 5503
diff changeset
   339
8c0cc07731e5 headers cleanup, converted some function-only sources into proper class method files, more use of OOP power, removed some 'respondsToSelector' calls, moved defines into their own header, more use of objc categories
koda
parents: 5503
diff changeset
   340
    // Return Size.
8c0cc07731e5 headers cleanup, converted some function-only sources into proper class method files, more use of OOP power, removed some 'respondsToSelector' calls, moved defines into their own header, more use of objc categories
koda
parents: 5503
diff changeset
   341
    return CGSizeMake(resultWidth,resultHeight);
8c0cc07731e5 headers cleanup, converted some function-only sources into proper class method files, more use of OOP power, removed some 'respondsToSelector' calls, moved defines into their own header, more use of objc categories
koda
parents: 5503
diff changeset
   342
}
8c0cc07731e5 headers cleanup, converted some function-only sources into proper class method files, more use of OOP power, removed some 'respondsToSelector' calls, moved defines into their own header, more use of objc categories
koda
parents: 5503
diff changeset
   343
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   344
@end