iphone 实现截屏的函数

//截屏实现 http://www.bit-101.com/blog/?p=1861


-(UIImage *) glToUIImageIphone4 

{


NSInteger myDataLength = 640 * 960 * 4;

// allocate array and read pixels into it.

GLubyte *buffer = (GLubyte *) malloc(myDataLength);

glReadPixels(0, 0, 640, 960, 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 < 960; y++)

{

for(int x = 0; x < 640 * 4; x++)

{

buffer2[(959 - y) * 640 * 4 + x] = buffer[y * 4 * 640 + 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 * 640;

CGColorSpaceRef colorSpaceRef = CGColorSpaceCreateDeviceRGB();

CGBitmapInfo bitmapInfo = kCGBitmapByteOrderDefault;

CGColorRenderingIntent renderingIntent = kCGRenderingIntentDefault;

// make the cgimage

CGImageRef imageRef = CGImageCreate(640, 960, 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;

}


-(UIImage *) glToUIImage 

{

NSInteger myDataLength = 320 * 480 * 4;


// allocate array and read pixels into it.

GLubyte *buffer = (GLubyte *) malloc(myDataLength);

glReadPixels(0, 0, 320, 480, 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 < 480; y++)

{

for(int x = 0; x < 320 * 4; x++)

{

buffer2[(479 - 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, 480, 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;

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值