Comment créer une image à partir d'un caractère non signé *

J'essaye de créer une nouvelle image à partir des données brutes dans unsigned char *. J'ai les bits par pixel à partir des données stockées. J'ai essayé de convertir des données brutes en NSData, mais l'image de résultat était nulle,

char non signé * bitmap = myData;

NSUInteger myImageDataLength = strlen ((const char *) bitmap);

NSData * d = [NSData dataWithBytes: longueur de bitmap: myImageDataLength];

imgView.image = [UIImage imageWithData: d];

Puis j'ai essayé d'utiliser le context pour créer une image comme suit:

CGColorSpaceRef colorspace = CGColorSpaceCreateDeviceRGB(); int width = mWidth; int height = mHeight; size_t bpp = mBpp; size_t bpc = 8; size_t bpr = (width * 4); CGContextRef context = CGBitmapContextCreate(bitmap, width, height, 8, bpr, colorspace, kCGImageAlphaNone); CGImageRef cgImage = nil; if (context != nil) { cgImage = CGBitmapContextCreateImage (context); CGContextRelease(context); } CGColorSpaceRelease(colorspace); UIImage *newImage = [UIImage imageWithCGImage:cgImage]; 

Je reçois un message d'erreur comme <Error>: CGBitmapContextCreate: unsupported parameter combination: 8 integer bits/component; 24 bits/pixel; 3-component color space; kCGImageAlphaNone; 64 bytes/row. <Error>: CGBitmapContextCreate: unsupported parameter combination: 8 integer bits/component; 24 bits/pixel; 3-component color space; kCGImageAlphaNone; 64 bytes/row.

J'ai essayé de le résoudre en définissant de nombreuses valeurs, mais ne peux pas find de résultat. J'ai cherché sur internet pour find cette solution mais tous les autres créent une image à partir d'images existantes pour get les valeurs de bits par composants et tout ça … Comment puis-je créer une image à partir de ces données ???

Image originale:

entrez la description de l'image ici

Image résultante:

entrez la description de l'image ici

L'image résultante devrait être déformée. (Warped même que fatBooth et autre application)

Le code suivant crée une instance UIImage partir de données de pixels brutes, en supposant que vous avez:

  • pixelData : datatables de pixels brutes
  • imageWidth , imageHeight : les dimensions de l'image
  • scanWidth : le nombre d'octets par ligne de balayage
  • bytesPerPixel : le nombre d'octets utilisés par pixel, généralement 4

Le UIImage résultant est assigné à la variable uiImage .

 CGDataProviderRef provider = CGDataProviderCreateWithData( NULL, pixelData, imageHeight * scanWidth, NULL); CGColorSpaceRef colorSpaceRef = CGColorSpaceCreateDeviceRGB(); CGBitmapInfo bitmapInfo = kCGBitmapByteOrderDefault; CGColorRenderingIntent renderingIntent = kCGRenderingIntentDefault; CGImageRef imageRef = CGImageCreate(imageWidth, imageHeight, 8, bytesPerPixel * 8, scanWidth, colorSpaceRef, bitmapInfo, provider, NULL, NO, renderingIntent); UIImage *uiImage = [UIImage imageWithCGImage:imageRef]; CGColorSpaceRelease(colorSpaceRef); CGImageRelease(imageRef); 

Essaye ça :-

 CGRect screenBounds = [[UIScreen mainScreen] bounds]; GLuint *buffer; //point the buffer to memory location code that here accordingly int backingWidth = screenBounds.size.width; int backingHeight =screenBounds.size.height; NSInteger myDataLength = backingWidth * backingHeight * 4; CGDataProviderRef provider = CGDataProviderCreateWithData(NULL, buffer, myDataLength, releaseScreenshotData); const int bitsPerComponent = 8; const int bitsPerPixel = 4 * bitsPerComponent; const int bytesPerRow = 4 * backingWidth; CGColorSpaceRef colorSpaceRef = CGColorSpaceCreateDeviceRGB(); CGBitmapInfo bitmapInfo = kCGBitmapByteOrderDefault; CGColorRenderingIntent renderingIntent = kCGRenderingIntentDefault; CGImageRef imageRef = CGImageCreate(backingWidth,backingHeight, bitsPerComponent, bitsPerPixel, bytesPerRow, colorSpaceRef, bitmapInfo, provider, NULL, NO, renderingIntent); CGColorSpaceRelease(colorSpaceRef); CGDataProviderRelease(provider); UIImage *myImage = [UIImage imageWithCGImage:imageRef]; CGImageRelease(imageRef); [uiimageviewobject setImage:myImage]; [self addSubview:uiimageviewobject];