]> git.saurik.com Git - uikittools.git/commitdiff
Added uishoot.
authorJay Freeman (saurik) <saurik@saurik.com>
Fri, 29 Aug 2008 00:04:35 +0000 (00:04 +0000)
committerJay Freeman (saurik) <saurik@saurik.com>
Fri, 29 Aug 2008 00:04:35 +0000 (00:04 +0000)
makefile
uishoot.mm [new file with mode: 0644]

index 4cf346e23902d709647f85106db55528beefccf8..740b6662b02b57071f11fadc33a4ac240fb17a65 100644 (file)
--- 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 (file)
index 0000000..b4bb260
--- /dev/null
@@ -0,0 +1,85 @@
+#import <CoreFoundation/CFData.h>
+#import <CoreGraphics/CGImage.h>
+#import <Foundation/Foundation.h>
+#import <UIKit/UIImage-UIImageInternal.h>
+
+#include <stdint.h>
+#include <stdlib.h>
+
+#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;
+}