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];
NSInteger
myDataLength = 320 * 308 * 4;
GLubyte
*buffer = (GLubyte *) malloc(myDataLength);
glReadPixels(0,
0, 320, 308, GL_RGBA, GL_UNSIGNED_BYTE, buffer);
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];
}
}
CGDataProviderRef
provider = CGDataProviderCreateWithData(NULL, buffer2, myDataLength, NULL);
int
bitsPerComponent = 8;
int
bitsPerPixel = 32;
int
bytesPerRow = 4 * 320;
CGColorSpaceRef
colorSpaceRef = CGColorSpaceCreateDeviceRGB();
CGBitmapInfo
bitmapInfo = kCGBitmapByteOrderDefault;
CGColorRenderingIntent
renderingIntent = kCGRenderingIntentDefault;
CGImageRef
imageRef = CGImageCreate(320, 308, bitsPerComponent, bitsPerPixel, bytesPerRow, colorSpaceRef, bitmapInfo, provider, NULL, NO, renderingIntent);
UIImage
*myImage = [UIImage imageWithCGImage:imageRef];
UIImageWriteToSavedPhotosAlbum(myImage,
nil, nil, nil);
return
myImage;
}
3.
-
(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);
[image1
drawInRect:CGRectMake(0, 0, image1.size.width, image1.size.height)];
[image2
drawInRect:CGRectMake(0, 0, image2.size.width, image2.size.height)];
UIImage
*resultingImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return
resultingImage;
}