几种截屏方法
【摘要】
1.UIGraphicsBeginImageContextWithOptions(pageView.page.bounds.size, YES, zoomScale); [pageView.page.layer renderInContext:UIGraphicsGetCurrentContext()]; U...
-
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[320*480*4];
-
glReadPixels(0,0,320,480,GL_RGBA,GL_UNSIGNED_BYTE,&buffer);
-
-
CGDataProviderRef ref = CGDataProviderCreateWithData(NULL, &buffer, 320*480*4, NULL);
-
CGImageRef iref = CGImageCreate(320,480,8,32,320*4,CGColorSpaceCreateDeviceRGB(),kCGBitmapByteOrderDefault,ref,NULL,true,kCGRenderingIntentDefault);
-
CGFloat width = CGImageGetWidth(iref);
-
CGFloat height = CGImageGetHeight(iref);
-
size_t length = width*height*4;
-
uint32_t *pixels = (uint32_t *)malloc(length);
-
CGContextRef context = CGBitmapContextCreate(pixels, width, height, 8, 320*4, 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) {
-
UIImage *result = [UIImage imageWithCGImage:cgScreen];
-
CGImageRelease(cgScreen);
-
return result;
-
}
-
return nil;
-
}
-
-
-
在程序中如何把两张图片合成为一张图片
-
- (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;
-
}
文章来源: zzzili.blog.csdn.net,作者:清雨小竹,版权归原作者所有,如需转载,请联系作者。
原文链接:zzzili.blog.csdn.net/article/details/9097135
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)