Should have read the Gamekit docs.

Damnit. Got everything working and then got errors during the first tests:

2010-10-19 18:34:14.969 Cooking Companion[1369:207] AGPSessionBroadcast failed (801c0001)

It would appear that I’m limited to 95kB. Sadly I am trying to send:

(gdb) print (NSUInteger)[data length]
$4 = 387339

I would expect that 381000 bytes of that are my UIImage data. So I have a few choices. Firstly I’m going to stop storing full sized images but limit them to a more conservative 640 pixels tops. This seems reasonable for the iPhone 4’s 960×640 and the iPad’s 1024×768 resolution. So that restricts it to:

(gdb) print (NSUInteger)[data length]
$5 = 895035

Right. Odd isn’t it? Run my images through this function to limit the size:


	CGSize size = selectedImage.size;
	CGFloat ratio = 0;
	if (size.width > size.height) {
		ratio = 640.0 / size.width;
	} else {
		ratio = 640.0 / size.height;
	}
	CGRect rect = CGRectMake(0.0, 0.0, ratio * size.width, ratio * size.height);
	
	UIGraphicsBeginImageContext(rect.size);
	[selectedImage drawInRect:rect];
	recipe.photo = UIGraphicsGetImageFromCurrentImageContext();
	UIGraphicsEndImageContext();

And they get much larger. A quick test using an empty view based application with a jpeg from my digital camera:

- (void)viewDidLoad {
    [super viewDidLoad];
	
	UIImage *jpeg = [UIImage imageNamed:@"P1040367.jpg"];
	NSData *original = UIImagePNGRepresentation(jpeg);
	
	CGSize size = jpeg.size;
	CGFloat ratio = 0;
	if (size.width > size.height) {
		ratio = 640.0 / size.width;
	} else {
		ratio = 640.0 / size.height;
	}
	CGRect rect = CGRectMake(0.0, 0.0, ratio * size.width, ratio * size.height);
	
	UIGraphicsBeginImageContext(rect.size);
	[jpeg drawInRect:rect];
	UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
	UIGraphicsEndImageContext();
	NSData *resized = UIImagePNGRepresentation(image);
	NSLog(@"Finito");
}

From debugging:

(gdb) print (CGSize)[jpeg size]
$2 = {
  width = 2448, 
  height = 3264
}
(gdb) print (CGSize)[image size]
$3 = {
  width = 480, 
  height = 640
}
(gdb) 

So it gets resized. What about the data length?

(gdb) print (NSUInteger)[original length]
$4 = 10572117
(gdb) print (NSUInteger)[resized length]
$5 = 639538

What’s interesting here is that the original jpeg is only 2.4 MB yet my NSData representation is 10MB. Not a good thing to transmit, it also makes me think the images I was using earlier were small and I was unwittingly making them much larger.

This entry was posted in Miscellany, Programming. Bookmark the permalink.

One Response to Should have read the Gamekit docs.

Comments are closed.