From 9b2ade70b1730d712d7ed248eb08ee1113e20ada Mon Sep 17 00:00:00 2001 From: "Jay Freeman (saurik)" Date: Fri, 29 Aug 2008 00:04:35 +0000 Subject: [PATCH] Added uishoot. --- makefile | 4 +-- uishoot.mm | 85 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 87 insertions(+), 2 deletions(-) create mode 100644 uishoot.mm diff --git a/makefile b/makefile index 4cf346e..740b666 100644 --- a/makefile +++ b/makefile @@ -1,4 +1,4 @@ -all: uialert +all: uishoot %: %.mm - $${PKG_TARG}-g++ -o $@ $< -framework Foundation -framework CoreFoundation -framework UIKit -lobjc + $${PKG_TARG}-g++ -o $@ $< -framework CoreFoundation -framework Foundation -framework UIKit -lobjc diff --git a/uishoot.mm b/uishoot.mm new file mode 100644 index 0000000..b4bb260 --- /dev/null +++ b/uishoot.mm @@ -0,0 +1,85 @@ +#import +#import +#import +#import + +#include +#include + +#define _trace() NSLog(@"_trace():%s:%u", __FILE__, __LINE__) + +extern "C" CGImageRef UIGetScreenImage(); +extern "C" NSData *UIImagePNGRepresentation(UIImage *); +extern "C" NSData *UIImageJPEGRepresentation(UIImage *); + +int main(int argc, char *argv[]) { + NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; + + CGImageRef screen = UIGetScreenImage(); + UIImage *image = [UIImage imageWithCGImage:screen]; + NSData *png = UIImagePNGRepresentation(image); + CFRelease(screen); + + NSString *dcim = [NSString stringWithFormat:@"%@/Media/DCIM", NSHomeDirectory()]; + NSString *apple = [NSString stringWithFormat:@"%@/999APPLE", dcim]; + + NSFileManager *manager = [NSFileManager defaultManager]; + BOOL directory; + + if (![manager fileExistsAtPath:apple isDirectory:&directory]) { + if (![manager + createDirectoryAtPath:apple + withIntermediateDirectories:YES + attributes:nil + error:NULL + ]) { + NSLog(@"%@ does not exist and cannot be created", apple); + return 1; + } + } else if (!directory) { + NSLog(@"%@ exists and is not a directory", apple); + return 1; + } + + bool taken = false; + + for (unsigned i(0); i != 10 && !taken; ++i) { + NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; + + for (unsigned j(0); j != 1000 && !taken; ++j) { + unsigned index = i * 1000 + j; + + NSString *file = [NSString stringWithFormat:@"%@/IMG_%04u.PNG", apple, index]; + + if (![manager fileExistsAtPath:file isDirectory:&directory]) { + [png writeToFile:file atomically:YES]; + + NSString *thm = [NSString stringWithFormat:@"%@/IMG_%04u.THM", apple, index]; + UIImage *thumb = [image _imageScaledToSize:CGSizeMake(55.0f, 55.0f) interpolationQuality:1]; + NSData *jpeg = UIImageJPEGRepresentation(thumb); + [jpeg writeToFile:thm atomically:YES]; + + NSString *poster = [NSString stringWithFormat:@"%@/.MISC/PosterImage.jpg", dcim, index]; + [jpeg writeToFile:poster atomically:YES]; + + CFNotificationCenterPostNotification( + CFNotificationCenterGetDarwinNotifyCenter(), + (CFStringRef) @"PictureWasTakenNotification", + NULL, NULL, YES + ); + + taken = true; + } + } + + [pool release]; + } + + if (!taken) { + NSLog(@"%@ is full", apple); + return 1; + } + + [pool release]; + return 0; +} -- 2.45.2