-(UIImage *)imageFromMultiArray:(MLMultiArray *)multiarray{
NSArray<NSNumber *> *shape = multiarray.shape;
int width = shape[0].intValue;
int height = shape[1].intValue;
int bitsPerComponent = 8;
int depth = 3;
int bitsPerPixel = bitsPerComponent * depth;
int bytesPerRow = width * bitsPerPixel / 8;
void *dataPointer = multiarray.dataPointer;
NSInteger dataCount = multiarray.count;
int *data32Arr = dataPointer;
NSInteger outputLength = dataCount * depth;
uint8_t *outputArr = malloc(outputLength);
int maxvalue = 0;
for (int i=0; i<dataCount; i++) {
int tthis = data32Arr[i];
if(tthis > maxvalue){
maxvalue = tthis;
}
}
double doubleMaxValue = maxvalue;
for (int i=0; i<dataCount; i++) {
double tthis = data32Arr[i];
tthis = tthis/doubleMaxValue;
UIColor *hsv = [[UIColor alloc] initWithHue:tthis*0.7 saturation:1 brightness:tthis==0?0:1 alpha:1];
double _red = ((NSNumber *)[hsv valueForKey:@"redComponent"]).doubleValue;
double _green = ((NSNumber *)[hsv valueForKey:@"greenComponent"]).doubleValue;
double _blue = ((NSNumber *)[hsv valueForKey:@"blueComponent"]).doubleValue;
outputArr[i * depth + 0] = (uint8_t)_red * 255;
outputArr[i * depth + 1] = (uint8_t)_green * 255;
outputArr[i * depth + 2] = (uint8_t)_blue * 255;
}
CFDataRef dataRef = CFDataCreate(nil, outputArr, outputLength);
CGDataProviderRef dataProviderRef = CGDataProviderCreateWithCFData(dataRef);
CGImageRef cgImageRef = CGImageCreate(width, height, bitsPerComponent, bitsPerPixel, bytesPerRow, CGColorSpaceCreateDeviceRGB(), kCGBitmapByteOrder16Big, dataProviderRef, nil, true, kCGRenderingIntentDefault);
free(outputArr);
UIImage *_image = [UIImage imageWithCGImage:cgImageRef];
return _image;
}
oc MLMultiArray 转UIImage
最新推荐文章于 2024-08-06 21:36:28 发布