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

被折叠的 条评论
为什么被折叠?



