project_files/HedgewarsMobile/Classes/UIImageExtra.m
author Jens Petersen
Mon, 12 Sep 2022 12:50:37 -0400
branch1.0.0
changeset 15883 9d4ba1912e71
parent 12872 00215a7ec5f5
permissions -rw-r--r--
build fix from https://bugzilla.redhat.com/show_bug.cgi?id=1853122
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