iPhone幾種截屏的代碼分享
1. UIGraphicsBeginImageContextWithOptions(pageView.page.bounds.size, YES, zoomScale); [pageView.page.layer renderInContext:UIGraphicsGetCurrentContext()]; UIImage *uiImage = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); 2.
(UIImage *) glToUIImage {
DWScrollView *pageView = [self getActivePageView];
pageView.page.backgroundColor = [UIColor clearColor];
// self.backgroundColor=[UIColor clearColor]; NSInteger myDataLength = 320 308 4;
// allocate array and read pixels into it. GLubyte buffer = (GLubyte ) malloc(myDataLength); glReadPixels(0, 0, 320, 308, GL_RGBA, GL_UNSIGNED_BYTE, buffer);
// gl renders "upside down" so swap top to bottom into new array. // there's gotta be a better way, but this works. GLubyte buffer2 = (GLubyte ) malloc(myDataLength);
for(int y = 0; y <308; y++) {
for(int x = 0; x <320 * 4; x++) { if(buffer[y* 4 * 320 + x]==0) buffer2[(307 - y) * 320 * 4 + x]=1; else buffer2[(307 - y) * 320 * 4 + x] = buffer[y* 4 * 320 + x]; }
}
// make data provider with data. CGDataProviderRef provider = CGDataProviderCreateWithData(NULL, buffer2, myDataLength, NULL);
// prep the ingredients int bitsPerComponent = 8; int bitsPerPixel = 32; int bytesPerRow = 4 * 320; CGColorSpaceRef colorSpaceRef = CGColorSpaceCreateDeviceRGB(); CGBitmapInfo bitmapInfo = kCGBitmapByteOrderDefault; CGColorRenderingIntent renderingIntent = kCGRenderingIntentDefault;
// make the cgimage CGImageRef imageRef = CGImageCreate(320, 308, bitsPerComponent, bitsPerPixel, bytesPerRow, colorSpaceRef, bitmapInfo, provider, NULL, NO, renderingIntent);
// then make the uiimage from that UIImage *myImage = [UIImage imageWithCGImage:imageRef]; UIImageWriteToSavedPhotosAlbum(myImage, nil, nil, nil); return myImage; }
3. // get screen
(void)grabScreen { unsigned char buffer[3204804]; glReadPixels(0,0,320,480,GL_RGBA,GL_UNSIGNED_BYTE,&buffer);
CGDataProviderRef ref = CGDataProviderCreateWithData(NULL, &buffer, 3204804, NULL); CGImageRef iref = CGImageCreate(320,480,8,32,3204,CGColorSpaceCreateDeviceRGB(),kCGBitmapByteOrderDefault,ref,NULL,true,kCGRenderingIntentDefault); CGFloat width = CGImageGetWidth(iref); CGFloat height = CGImageGetHeight(iref); size_t length = widthheight4; uint32_t pixels = (uint32_t )malloc(length); CGContextRef context = CGBitmapContextCreate(pixels, width, height, 8, 3204, CGImageGetColorSpace(iref), kCGImageAlphaLast | kCGBitmapByteOrder32Big); CGContextTranslateCTM(context, 0.0, height); CGContextScaleCTM(context, 1.0, -1.0); CGContextDrawImage(context, CGRectMake(0.0, 0.0, width, height), iref); CGImageRef outputRef = CGBitmapContextCreateImage(context); UIImage *outputImage = [UIImage imageWithCGImage:outputRef];
UIImageWriteToSavedPhotosAlbum(outputImage, nil, nil, nil);
CGContextRelease(context); CGImageRelease(iref); CGDataProviderRelease(ref); } 4. CGImageRef UIGetScreenImage(); void SaveScreenImage(NSString path) { NSAutoreleasePool pool = [[NSAutoreleasePool alloc] init]; CGImageRef cgImage = UIGetScreenImage();
void *imageBytes = NULL; if (cgImage == NULL) { CGColorSpaceRef colorspace = CGColorSpaceCreateDeviceRGB(); imageBytes = malloc(320 * 480 * 4); CGContextRef context = CGBitmapContextCreate(imageBytes, 320, 480, 8, 320 * 4, colorspace, kCGImageAlphaNoneSkipFirst | kCGBitmapByteOrder32Big); CGColorSpaceRelease(colorspace); for (UIWindow *window in [[UIApplication sharedApplication] windows]) { CGRect bounds = [window bounds]; CALayer *layer = [window layer]; CGContextSaveGState(context); if ([layer contentsAreFlipped]) { CGContextTranslateCTM(context, 0.0f, bounds.size.height); CGContextScaleCTM(context, 1.0f, -1.0f); } [layer renderInContext:(CGContextRef)context]; CGContextRestoreGState(context); } cgImage = CGBitmapContextCreateImage(context); CGContextRelease(context); }
NSData *pngData = UIImagePNGRepresentation([UIImage imageWithCGImage:cgImage]); CGImageRelease(cgImage);
if (imageBytes) free(imageBytes);
[pngData writeToFile:path atomically:YES]; [pool release]; }
5.
- (UIImage *)imageWithScreenContents
{
CGImageRef cgScreen = UIGetScreenImage();
if (cgScreen) {
} return nil; }UIImage *result = [UIImage imageWithCGImage:cgScreen]; CGImageRelease(cgScreen); return result;
在程序中如何把兩張圖片合成為一張圖片
(UIImage )addImage:(UIImage )image1 toImage:(UIImage *)image2 {
UIGraphicsBeginImageContext(image1.size);// Draw image1
[image1 drawInRect:CGRectMake(0, 0, image1.size.width, image1.size.height)];// Draw image2
[image2 drawInRect:CGRectMake(0, 0, image2.size.width, image2.size.height)];UIImage *resultingImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return resultingImage;
}</pre>