Squeak doesn't know what a UIImage is so
- (NSData *) makeUIImageJPEGRepresentation: (UIImage*) image compression: (CGFloat) compress width: (CGFloat) width height: (CGFloat) height { CGSize newSize; newSize.width = width; newSize.height = height; UIGraphicsBeginImageContext( newSize );// a CGSize that has the size you want [image drawInRect: CGRectMake(0,0,newSize.width,newSize.height)]; //image is the original UIImage UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); NSData *data = UIImageJPEGRepresentation (newImage,compress); [data retain]; return data; }
On the Smalltalk side anImage is the UIImage insance, we indicate the JPEG compression factor, and the width/height and make the call
We also have to later release the anImage, then we make the ObjectiveCBridge call to move the bytes from jpegNSData into a Smalltalk
byteArray instance and as you see free the jpegNSData NSdata instance.
stream then is a read stream that reads from the rawData which is the JPEG data, the form fromBinaryStream: figures out it's a jpeg file and reads it.
Obviously we could have a method that would directly create a Form instance from the UIImage but that would be lot's more work, yet very efficient.
jpegNSData := sharedApplication delegate makeUIImageJPEGRepresentation: anImage compression: 8.0 width: (Display boundingBox width* 1.0) height: (Display boundingBox height* 1.0). anImage release. rawData := ObjectiveCBridge fetchByteArrayFrom: jpegNSData bytes length: jpegNSData length. jpegNSData release. stream := ReadStream on: rawData. form := Form fromBinaryStream: stream.