UIImage: fill the background

I made this fitImage function below, which accepts UIImage and CGSize . If the input image is larger than the input field, the image will be scaled down to fill it. If the field and the image do not have the same ratio, the image does not completely fill the field, and there will be some visible background. In this case, this background is always white. How can I change this, for example. Black background?

 + (UIImage*) fitImage:(UIImage*)image inBox:(CGSize)size { if (image.size.width==size.width && image.size.height==size.height) return image; if (image.size.width<size.width && image.size.height<size.height) return [Util scaleImage:image toSize:size]; float widthFactor = size.width / image.size.width; float heightFactor = size.height / image.size.height; CGSize scaledSize = size; if (widthFactor<heightFactor) { scaledSize.width = size.width; scaledSize.height = image.size.height * widthFactor; } else { scaledSize.width = image.size.width * heightFactor; scaledSize.height = size.height; } UIGraphicsBeginImageContextWithOptions( size, NO, 0.0 ); float marginX = (size.width-scaledSize.width)/2; float marginY = (size.height-scaledSize.height)/2; CGRect scaledImageRect = CGRectMake(marginX, marginY, scaledSize.width, scaledSize.height ); [image drawInRect:scaledImageRect]; UIImage* scaledImage = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); return scaledImage; } 

Please tell me if you need more information.

Decision:

 + (UIImage*) fitImage:(UIImage*)image inBox:(CGSize)size withBackground:(UIColor*)color { if (image.size.width==size.width && image.size.height==size.height) return image; if (image.size.width<size.width && image.size.height<size.height) return [Util scaleImage:image toSize:size]; float widthFactor = size.width / image.size.width; float heightFactor = size.height / image.size.height; CGSize scaledSize = size; if (widthFactor<heightFactor) { scaledSize.width = size.width; scaledSize.height = image.size.height * widthFactor; } else { scaledSize.width = image.size.width * heightFactor; scaledSize.height = size.height; } UIGraphicsBeginImageContextWithOptions( size, NO, 0.0 ); float marginX = (size.width-scaledSize.width)/2; float marginY = (size.height-scaledSize.height)/2; CGRect scaledImageRect = CGRectMake(marginX, marginY, scaledSize.width, scaledSize.height ); UIImage* temp = UIGraphicsGetImageFromCurrentImageContext(); [color set]; UIRectFill(CGRectMake(0.0, 0.0, temp.size.width, temp.size.height)); [image drawInRect:scaledImageRect]; UIImage* scaledImage = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); return scaledImage; } 
+6
source share
1 answer

You can use UIRectFill (rect) to fill the background of the raster context with the current fill color. To set the fill color, you can use [UIColor set].

eg.

 //Get a temp image to determine the size of the bitmap context UIImage* temp = UIGraphicsGetImageFromCurrentImageContext(); [[UIColor redColor] set]; //set the desired background color UIRectFill(CGRectMake(0.0, 0.0, temp.size.width, temp.size.height)); //fill the bitmap context [image drawInRect:scaledImageRect]; //draw your image over the filled background 
+22
source

Source: https://habr.com/ru/post/902989/


All Articles