iphone下bmp读取交显示的两种方法

本文介绍在iPhone环境下处理BMP格式图片的两种方法:第一种方法使用CGImageRefGetImageData来创建CGImage对象;第二种方法从文件读取BMP数据并创建UIImage对象。适用于希望在iPhone上使用BMP格式图片的开发者。

虽然在iphone下很少使用bmp格式的图片,但在此要介绍两种方法,让对bmp情有独钟的人,了确心中愿望。

#define BMP_SIZE 320*480*3 #define BMP_HEADER_LENGTH 54 //方法一: CGImageRef GetImageData() { unsigned char* pData=NULL; int i = 0; int bitsPerComponent = 8; int bitsPerPixel = 24; int bytesPerRow = 3 * SCREEN_METRIC_WIDTH; NSInteger myLCDDataLength = SCREEN_METRIC_WIDTH * SCREEN_METRIC_HEIGHT * 2; CGColorSpaceRef colorSpaceRef = CGColorSpaceCreateDeviceRGB(); CGBitmapInfo bmpInof = kCGBitmapByteOrderDefault; CGColorRenderingIntent renderingIntent = kCGRenderingIntentDefault; CGDataProviderRef provider = nil; void*pBuffer = malloc(BMP_SIZE + BMP_HEADER_LENGTH); for(pData = pBuffer, i = 0; i < SCREEN_METRIC_WIDTH * SCREEN_METRIC_HEIGHT; ++i) { *pData++ = 0xFF; //R *pData++ = 0x0; //G *pData++ = 0x0; //B } provider = CGDataProviderCreateWithData(NULL, pBuffer, myLCDDataLength, NULL); return CGImageCreate(SCREEN_METRIC_WIDTH,SCREEN_METRIC_HEIGHT, bitsPerComponent, bitsPerPixel, bytesPerRow, colorSpaceRef, bmpInof, provider, NULL, NO, renderingIntent); } void GUI_DrawBMP() { CGImageRef m_cgImage = GetImageData(); pUIImage = [ [ UIImage alloc] initWithCGImage:m_cgImage]; [pUIImage drawAtPoint:CGPointMake(0.0f,0.0f)]; [pUIImage dealloc]; } //方法二: const char* const g_pszFilePath = "/example.bmp"; FILE * pFile = fopen(g_pszFilePath, "rb"); if(NULL != pFile) { void*pBuffer = malloc(BMP_SIZE + BMP_HEADER_LENGTH); if (NULL != pBuffer) { fseek(pFile , 0, SEEK_SET); fread(pBuffer, 1, 54, pFile); fclose(pFile); memset(pBuffer + BMP_HEADER_LENGTH, BMP_SIZE); NSData* pNSData = [ [NSData alloc] initWithBytes:pBuffer length: BMP_SIZE + BMP_HEADER_LENGTH]; UIImage* pUIImage = [ [ UIImage alloc] initWithData:myNSData]; [pUIImage drawAtPoint:CGPointMake(0.0f,0.0f)]; [pNSData dealloc]; free(pBuffer); } }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值