project_files/HedgewarsMobile/Classes/UIImageExtra.m
author Wuzzy <Wuzzy2@mail.ru>
Mon, 16 Sep 2019 17:33:49 +0200
changeset 15431 8504fee3b601
parent 12872 00215a7ec5f5
permissions -rw-r--r--
Racer: Fix weird water splashes after waypoint placement Does not affect official racer, as only waypoint placement is touched. The reason was that the air attack gear sometimes was not deleted fast enough so it might occassionally drop some air bombs (these are deleted now). Also, the airplane position was set to water level, which caused another water splash.
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
10108
c68cf030eded update FSF address. note: two sdl include files (by Sam Lantinga) still have the old FSF address in their copyright - but I ain't gonna touch their copyright headers
sheepluva
parents: 6832
diff changeset
    16
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA.
3829
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
12872
00215a7ec5f5 - BIG CHANGE: Convert iOS project to use ARC
antonc27 <antonc27@mail.ru>
parents: 10108
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
12872
00215a7ec5f5 - BIG CHANGE: Convert iOS project to use ARC
antonc27 <antonc27@mail.ru>
parents: 10108
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
12872
00215a7ec5f5 - BIG CHANGE: Convert iOS project to use ARC
antonc27 <antonc27@mail.ru>
parents: 10108
diff changeset
    93
- (id)initWithContentsOfFile:(NSString *)path andCutAt:(CGRect)rect {
3547
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
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3621
diff changeset
   102
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   103
        // create a UIImage from the CGImage (memory must be allocated already)
3621
a8ddf681ba7d initial support for customizing weaponset
koda
parents: 3573
diff changeset
   104
        UIImage *sprite = [self initWithCGImage:cgImage];
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3621
diff changeset
   105
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   106
        // clean memory
3621
a8ddf681ba7d initial support for customizing weaponset
koda
parents: 3573
diff changeset
   107
        CGImageRelease(cgImage);
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   108
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   109
        // return resulting image
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   110
        return sprite;
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   111
    } else {
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   112
        DLog(@"error - image == nil");
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   113
        return nil;
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   114
    }
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   115
}
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   116
12872
00215a7ec5f5 - BIG CHANGE: Convert iOS project to use ARC
antonc27 <antonc27@mail.ru>
parents: 10108
diff changeset
   117
- (UIImage *)cutAt:(CGRect)rect {
3621
a8ddf681ba7d initial support for customizing weaponset
koda
parents: 3573
diff changeset
   118
    CGImageRef cgImage = CGImageCreateWithImageInRect([self CGImage], rect);
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3621
diff changeset
   119
3621
a8ddf681ba7d initial support for customizing weaponset
koda
parents: 3573
diff changeset
   120
    UIImage *res = [UIImage imageWithCGImage:cgImage];
a8ddf681ba7d initial support for customizing weaponset
koda
parents: 3573
diff changeset
   121
    CGImageRelease(cgImage);
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3621
diff changeset
   122
3621
a8ddf681ba7d initial support for customizing weaponset
koda
parents: 3573
diff changeset
   123
    return res;
a8ddf681ba7d initial support for customizing weaponset
koda
parents: 3573
diff changeset
   124
}
a8ddf681ba7d initial support for customizing weaponset
koda
parents: 3573
diff changeset
   125
12872
00215a7ec5f5 - BIG CHANGE: Convert iOS project to use ARC
antonc27 <antonc27@mail.ru>
parents: 10108
diff changeset
   126
- (UIImage *)convertToGrayScale {
3573
c84067629035 complete configuration for schemes
koda
parents: 3547
diff changeset
   127
    // Create image rectangle with current image width/height
c84067629035 complete configuration for schemes
koda
parents: 3547
diff changeset
   128
    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
   129
3573
c84067629035 complete configuration for schemes
koda
parents: 3547
diff changeset
   130
    // Grayscale color space
c84067629035 complete configuration for schemes
koda
parents: 3547
diff changeset
   131
    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceGray();
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3621
diff changeset
   132
3573
c84067629035 complete configuration for schemes
koda
parents: 3547
diff changeset
   133
    // Create bitmap content with current image size and grayscale colorspace
c84067629035 complete configuration for schemes
koda
parents: 3547
diff changeset
   134
    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
   135
3573
c84067629035 complete configuration for schemes
koda
parents: 3547
diff changeset
   136
    // Draw image into current context, with specified rectangle
c84067629035 complete configuration for schemes
koda
parents: 3547
diff changeset
   137
    // using previously defined context (with grayscale colorspace)
c84067629035 complete configuration for schemes
koda
parents: 3547
diff changeset
   138
    CGContextDrawImage(context, imageRect, [self CGImage]);
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3621
diff changeset
   139
3573
c84067629035 complete configuration for schemes
koda
parents: 3547
diff changeset
   140
    // Create bitmap image info from pixel data in current context
c84067629035 complete configuration for schemes
koda
parents: 3547
diff changeset
   141
    CGImageRef imageRef = CGBitmapContextCreateImage(context);
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3621
diff changeset
   142
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3621
diff changeset
   143
    // Create a new UIImage object
3573
c84067629035 complete configuration for schemes
koda
parents: 3547
diff changeset
   144
    UIImage *newImage = [UIImage imageWithCGImage:imageRef];
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3621
diff changeset
   145
3573
c84067629035 complete configuration for schemes
koda
parents: 3547
diff changeset
   146
    // Release colorspace, context and bitmap information
3978
9660600e43cb fix some glitches
koda
parents: 3948
diff changeset
   147
    CFRelease(imageRef);
3573
c84067629035 complete configuration for schemes
koda
parents: 3547
diff changeset
   148
    CGContextRelease(context);
3978
9660600e43cb fix some glitches
koda
parents: 3948
diff changeset
   149
    CGColorSpaceRelease(colorSpace);
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3621
diff changeset
   150
3573
c84067629035 complete configuration for schemes
koda
parents: 3547
diff changeset
   151
    // Return the new grayscale image
c84067629035 complete configuration for schemes
koda
parents: 3547
diff changeset
   152
    return newImage;
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   153
}
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   154
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   155
// 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
   156
-(UIImage*) maskImageWith:(UIImage *)maskImage {
3573
c84067629035 complete configuration for schemes
koda
parents: 3547
diff changeset
   157
    // prepare the reference image
c84067629035 complete configuration for schemes
koda
parents: 3547
diff changeset
   158
    CGImageRef maskRef = [maskImage CGImage];
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3621
diff changeset
   159
3573
c84067629035 complete configuration for schemes
koda
parents: 3547
diff changeset
   160
    // create the mask using parameters of the mask reference
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   161
    CGImageRef mask = CGImageMaskCreate(CGImageGetWidth(maskRef),
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   162
                                        CGImageGetHeight(maskRef),
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   163
                                        CGImageGetBitsPerComponent(maskRef),
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   164
                                        CGImageGetBitsPerPixel(maskRef),
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   165
                                        CGImageGetBytesPerRow(maskRef),
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   166
                                        CGImageGetDataProvider(maskRef), NULL, false);
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3621
diff changeset
   167
3573
c84067629035 complete configuration for schemes
koda
parents: 3547
diff changeset
   168
    // create an image in the current context
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   169
    CGImageRef masked = CGImageCreateWithMask([self CGImage], mask);
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   170
    CGImageRelease(mask);
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3621
diff changeset
   171
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   172
    UIImage* retImage = [UIImage imageWithCGImage:masked];
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   173
    CGImageRelease(masked);
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3621
diff changeset
   174
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   175
    return retImage;
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   176
}
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   177
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   178
// 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
   179
void addRoundedRectToPath(CGContextRef context, CGRect rect, CGFloat ovalWidth, CGFloat ovalHeight) {
c84067629035 complete configuration for schemes
koda
parents: 3547
diff changeset
   180
    CGFloat fw, fh;
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   181
    if (ovalWidth == 0 || ovalHeight == 0) {
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   182
        CGContextAddRect(context, rect);
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   183
        return;
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   184
    }
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   185
    CGContextSaveGState(context);
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   186
    CGContextTranslateCTM (context, CGRectGetMinX(rect), CGRectGetMinY(rect));
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   187
    CGContextScaleCTM (context, ovalWidth, ovalHeight);
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   188
    fw = CGRectGetWidth (rect) / ovalWidth;
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   189
    fh = CGRectGetHeight (rect) / ovalHeight;
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   190
    CGContextMoveToPoint(context, fw, fh/2);
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   191
    CGContextAddArcToPoint(context, fw, fh, fw/2, fh, 1);
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   192
    CGContextAddArcToPoint(context, 0, fh, 0, fh/2, 1);
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   193
    CGContextAddArcToPoint(context, 0, 0, fw/2, 0, 1);
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   194
    CGContextAddArcToPoint(context, fw, 0, fw, fh/2, 1);
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   195
    CGContextClosePath(context);
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   196
    CGContextRestoreGState(context);
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   197
}
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   198
12872
00215a7ec5f5 - BIG CHANGE: Convert iOS project to use ARC
antonc27 <antonc27@mail.ru>
parents: 10108
diff changeset
   199
- (UIImage *)makeRoundCornersOfSize:(CGSize)sizewh {
3573
c84067629035 complete configuration for schemes
koda
parents: 3547
diff changeset
   200
    CGFloat cornerWidth = sizewh.width;
c84067629035 complete configuration for schemes
koda
parents: 3547
diff changeset
   201
    CGFloat cornerHeight = sizewh.height;
6209
074ab6ebcb3e restore runtime compatibility with ios 3.2
koda
parents: 6080
diff changeset
   202
    CGFloat screenScale = [[UIScreen mainScreen] safeScale];
4476
4bf74e158f44 team selection completely refactored, now has animation and more performance
koda
parents: 4461
diff changeset
   203
    CGFloat w = self.size.width * screenScale;
4bf74e158f44 team selection completely refactored, now has animation and more performance
koda
parents: 4461
diff changeset
   204
    CGFloat h = self.size.height * screenScale;
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3621
diff changeset
   205
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   206
    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   207
    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
   208
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   209
    CGContextBeginPath(context);
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   210
    CGRect rect = CGRectMake(0, 0, w, h);
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   211
    addRoundedRectToPath(context, rect, cornerWidth, cornerHeight);
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   212
    CGContextClosePath(context);
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   213
    CGContextClip(context);
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3621
diff changeset
   214
3573
c84067629035 complete configuration for schemes
koda
parents: 3547
diff changeset
   215
    CGContextDrawImage(context, CGRectMake(0, 0, w, h), [self CGImage]);
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3621
diff changeset
   216
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   217
    CGImageRef imageMasked = CGBitmapContextCreateImage(context);
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   218
    CGContextRelease(context);
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   219
    CGColorSpaceRelease(colorSpace);
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3621
diff changeset
   220
6209
074ab6ebcb3e restore runtime compatibility with ios 3.2
koda
parents: 6080
diff changeset
   221
    UIImage *resultImage;
074ab6ebcb3e restore runtime compatibility with ios 3.2
koda
parents: 6080
diff changeset
   222
    if ([UIImage respondsToSelector:@selector(imageWithCGImage:scale:orientation:)])
074ab6ebcb3e restore runtime compatibility with ios 3.2
koda
parents: 6080
diff changeset
   223
        resultImage = [UIImage imageWithCGImage:imageMasked scale:screenScale orientation:UIImageOrientationUp];
074ab6ebcb3e restore runtime compatibility with ios 3.2
koda
parents: 6080
diff changeset
   224
    else
074ab6ebcb3e restore runtime compatibility with ios 3.2
koda
parents: 6080
diff changeset
   225
        resultImage = [UIImage imageWithCGImage:imageMasked];
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   226
    CGImageRelease(imageMasked);
3697
d5b30d6373fc remove trailing spaces from end of line
koda
parents: 3621
diff changeset
   227
6209
074ab6ebcb3e restore runtime compatibility with ios 3.2
koda
parents: 6080
diff changeset
   228
    return resultImage;
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   229
}
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   230
3903
db01c37494af pimp-my-savagame-table
koda
parents: 3829
diff changeset
   231
// by http://www.sixtemia.com/journal/2010/06/23/uiimage-negative-color-effect/
12872
00215a7ec5f5 - BIG CHANGE: Convert iOS project to use ARC
antonc27 <antonc27@mail.ru>
parents: 10108
diff changeset
   232
- (UIImage *)convertToNegative {
3903
db01c37494af pimp-my-savagame-table
koda
parents: 3829
diff changeset
   233
    UIGraphicsBeginImageContext(self.size);
db01c37494af pimp-my-savagame-table
koda
parents: 3829
diff changeset
   234
    CGContextSetBlendMode(UIGraphicsGetCurrentContext(), kCGBlendModeCopy);
db01c37494af pimp-my-savagame-table
koda
parents: 3829
diff changeset
   235
    [self drawInRect:CGRectMake(0, 0, self.size.width, self.size.height)];
db01c37494af pimp-my-savagame-table
koda
parents: 3829
diff changeset
   236
    CGContextSetBlendMode(UIGraphicsGetCurrentContext(), kCGBlendModeDifference);
db01c37494af pimp-my-savagame-table
koda
parents: 3829
diff changeset
   237
    CGContextSetFillColorWithColor(UIGraphicsGetCurrentContext(),[UIColor whiteColor].CGColor);
db01c37494af pimp-my-savagame-table
koda
parents: 3829
diff changeset
   238
    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
   239
    // create an image from the current contex (not thread safe)
3903
db01c37494af pimp-my-savagame-table
koda
parents: 3829
diff changeset
   240
    UIImage *result = UIGraphicsGetImageFromCurrentImageContext();
db01c37494af pimp-my-savagame-table
koda
parents: 3829
diff changeset
   241
    UIGraphicsEndImageContext();
db01c37494af pimp-my-savagame-table
koda
parents: 3829
diff changeset
   242
    return result;
db01c37494af pimp-my-savagame-table
koda
parents: 3829
diff changeset
   243
}
db01c37494af pimp-my-savagame-table
koda
parents: 3829
diff changeset
   244
12872
00215a7ec5f5 - BIG CHANGE: Convert iOS project to use ARC
antonc27 <antonc27@mail.ru>
parents: 10108
diff changeset
   245
+ (UIImage *)whiteImage:(CGSize)ofSize {
4356
d1d26f8963a3 update some files for new graphics and new ios4.2
koda
parents: 3978
diff changeset
   246
    CGFloat w = ofSize.width;
d1d26f8963a3 update some files for new graphics and new ios4.2
koda
parents: 3978
diff changeset
   247
    CGFloat h = ofSize.height;
4478
05029b4d8490 code cleanup
koda
parents: 4476
diff changeset
   248
    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
   249
4356
d1d26f8963a3 update some files for new graphics and new ios4.2
koda
parents: 3978
diff changeset
   250
    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
d1d26f8963a3 update some files for new graphics and new ios4.2
koda
parents: 3978
diff changeset
   251
    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
   252
d1d26f8963a3 update some files for new graphics and new ios4.2
koda
parents: 3978
diff changeset
   253
    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
   254
    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
   255
    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
   256
4356
d1d26f8963a3 update some files for new graphics and new ios4.2
koda
parents: 3978
diff changeset
   257
    CGImageRef image = CGBitmapContextCreateImage(context);
d1d26f8963a3 update some files for new graphics and new ios4.2
koda
parents: 3978
diff changeset
   258
    CGContextRelease(context);
d1d26f8963a3 update some files for new graphics and new ios4.2
koda
parents: 3978
diff changeset
   259
    CGColorSpaceRelease(colorSpace);
d1d26f8963a3 update some files for new graphics and new ios4.2
koda
parents: 3978
diff changeset
   260
d1d26f8963a3 update some files for new graphics and new ios4.2
koda
parents: 3978
diff changeset
   261
    UIImage *bkgImg = [UIImage imageWithCGImage:image];
d1d26f8963a3 update some files for new graphics and new ios4.2
koda
parents: 3978
diff changeset
   262
    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
   263
    return bkgImg;
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents: 3903
diff changeset
   264
}
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents: 3903
diff changeset
   265
12872
00215a7ec5f5 - BIG CHANGE: Convert iOS project to use ARC
antonc27 <antonc27@mail.ru>
parents: 10108
diff changeset
   266
+ (UIImage *)drawHogsRepeated:(NSInteger)manyTimes {
6209
074ab6ebcb3e restore runtime compatibility with ios 3.2
koda
parents: 6080
diff changeset
   267
    NSString *imgString = [[NSString alloc] initWithFormat:@"%@/hedgehog.png",[[NSBundle mainBundle] resourcePath]];
074ab6ebcb3e restore runtime compatibility with ios 3.2
koda
parents: 6080
diff changeset
   268
    UIImage *hogSprite = [[UIImage alloc] initWithContentsOfFile:imgString];
074ab6ebcb3e restore runtime compatibility with ios 3.2
koda
parents: 6080
diff changeset
   269
    CGFloat screenScale = [[UIScreen mainScreen] safeScale];
074ab6ebcb3e restore runtime compatibility with ios 3.2
koda
parents: 6080
diff changeset
   270
    int w = hogSprite.size.width * screenScale;
074ab6ebcb3e restore runtime compatibility with ios 3.2
koda
parents: 6080
diff changeset
   271
    int h = hogSprite.size.height * screenScale;
074ab6ebcb3e restore runtime compatibility with ios 3.2
koda
parents: 6080
diff changeset
   272
    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
074ab6ebcb3e restore runtime compatibility with ios 3.2
koda
parents: 6080
diff changeset
   273
    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
   274
074ab6ebcb3e restore runtime compatibility with ios 3.2
koda
parents: 6080
diff changeset
   275
    // draw the two images in the current context
074ab6ebcb3e restore runtime compatibility with ios 3.2
koda
parents: 6080
diff changeset
   276
    for (int i = 0; i < manyTimes; i++)
074ab6ebcb3e restore runtime compatibility with ios 3.2
koda
parents: 6080
diff changeset
   277
        CGContextDrawImage(context, CGRectMake(i*8*screenScale, 0, w, h), [hogSprite CGImage]);
074ab6ebcb3e restore runtime compatibility with ios 3.2
koda
parents: 6080
diff changeset
   278
074ab6ebcb3e restore runtime compatibility with ios 3.2
koda
parents: 6080
diff changeset
   279
    // Create bitmap image info from pixel data in current context
074ab6ebcb3e restore runtime compatibility with ios 3.2
koda
parents: 6080
diff changeset
   280
    CGImageRef imageRef = CGBitmapContextCreateImage(context);
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 a new UIImage object
074ab6ebcb3e restore runtime compatibility with ios 3.2
koda
parents: 6080
diff changeset
   283
    UIImage *resultImage;
074ab6ebcb3e restore runtime compatibility with ios 3.2
koda
parents: 6080
diff changeset
   284
    if ([UIImage respondsToSelector:@selector(imageWithCGImage:scale:orientation:)])
074ab6ebcb3e restore runtime compatibility with ios 3.2
koda
parents: 6080
diff changeset
   285
        resultImage = [UIImage imageWithCGImage:imageRef scale:screenScale orientation:UIImageOrientationUp];
074ab6ebcb3e restore runtime compatibility with ios 3.2
koda
parents: 6080
diff changeset
   286
    else
074ab6ebcb3e restore runtime compatibility with ios 3.2
koda
parents: 6080
diff changeset
   287
        resultImage = [UIImage imageWithCGImage:imageRef];
074ab6ebcb3e restore runtime compatibility with ios 3.2
koda
parents: 6080
diff changeset
   288
074ab6ebcb3e restore runtime compatibility with ios 3.2
koda
parents: 6080
diff changeset
   289
    // Release colorspace, context and bitmap information
074ab6ebcb3e restore runtime compatibility with ios 3.2
koda
parents: 6080
diff changeset
   290
    CGColorSpaceRelease(colorSpace);
074ab6ebcb3e restore runtime compatibility with ios 3.2
koda
parents: 6080
diff changeset
   291
    CGContextRelease(context);
074ab6ebcb3e restore runtime compatibility with ios 3.2
koda
parents: 6080
diff changeset
   292
    CFRelease(imageRef);
074ab6ebcb3e restore runtime compatibility with ios 3.2
koda
parents: 6080
diff changeset
   293
074ab6ebcb3e restore runtime compatibility with ios 3.2
koda
parents: 6080
diff changeset
   294
    return resultImage;
074ab6ebcb3e restore runtime compatibility with ios 3.2
koda
parents: 6080
diff changeset
   295
}
074ab6ebcb3e restore runtime compatibility with ios 3.2
koda
parents: 6080
diff changeset
   296
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
   297
// 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
   298
// https://github.com/steipete/PSFramework/blob/master/PSFramework%20Version%200.3/PhotoshopFramework/PSMetaDataFunctions.m
12872
00215a7ec5f5 - BIG CHANGE: Convert iOS project to use ARC
antonc27 <antonc27@mail.ru>
parents: 10108
diff changeset
   299
+ (CGSize)imageSizeFromMetadataOf:(NSString *)aFileName {
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
    // 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
   301
    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
   302
    // 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
   303
    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
   304
    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
   305
        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
   306
        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
   307
    }
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
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
    // 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
   310
    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
   311
    // 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
   312
    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
   313
    // 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
   314
    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
   315
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
    // 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
   317
    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
   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
    // 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
   320
    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
   321
        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
   322
        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
   323
    }
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
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
    // 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
   326
    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
   327
    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
   328
    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
   329
        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
   330
        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
   331
    }
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
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
    // 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
   334
    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
   335
    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
   336
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
    // 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
   338
    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
   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
3547
02875b1145b7 i <3 mercurial
koda
parents: 3546
diff changeset
   341
@end