iOS implements the code that takes the color from the background image
- 2020-05-19 05:58:55
- OfStack
The example of this article explains the code of iOS to take color from the background image, which is Shared with you for your reference. The details are as follows
Implementation code:
void *bitmapData; // A pointer to a memory space whose size is equal to the image used RGB The number of bytes occupied by a channel.
static CGContextRef CreateRGBABitmapContext (CGImageRef inImage)
{
CGContextRef context = NULL;
CGColorSpaceRef colorSpace;
int bitmapByteCount;
int bitmapBytesPerRow;
size_t pixelsWide = CGImageGetWidth(inImage); // Gets the number of pixels in the landscape
size_t pixelsHigh = CGImageGetHeight(inImage);
bitmapBytesPerRow = (pixelsWide * 4); // every 1 The number of bytes occupied by each pixel in a row ARGB4 Each channel is occupied 8 a bit(0-255) The space of
bitmapByteCount = (bitmapBytesPerRow * pixelsHigh); // Calculate the number of bytes taken by the entire graph
colorSpace = CGColorSpaceCreateDeviceRGB();// Create device-dependent RGB channel
// Allocate enough memory space to hold the number of image bytes
bitmapData = malloc( bitmapByteCount );
// create CoreGraphic The graphic context that describes bitmaData Points to the memory space needed to draw the image 1 Some drawing parameters
context = CGBitmapContextCreate (bitmapData,
pixelsWide,
pixelsHigh,
8,
bitmapBytesPerRow,
colorSpace,
kCGImageAlphaPremultipliedLast);
//Core Foundation By containing Create , Alloc The method name creates a pointer that needs to be used CFRelease() Function to release
CGColorSpaceRelease( colorSpace );
return context;
}
// return 1 The pointer to 1 Each of the arrays 4 All the elements are on the image 1 In pixels RGBA The numerical (0-255) , with no sign char Because it's in the right range 0-255
static unsigned char *RequestImagePixelData(UIImage *inImage)
{
CGImageRef img = [inImage CGImage];
CGSize size = [inImage size];
// Use the above function to create the context
CGContextRef cgctx = CreateRGBABitmapContext(img);
CGRect rect = {{0,0},{size.width, size.height}};
// Draws the target image to the specified context, actually within the context bitmapData .
CGContextDrawImage(cgctx, rect, img);
unsigned char *data = CGBitmapContextGetData (cgctx);
// Releases the context created by the above function
CGContextRelease(cgctx);
return data;
}
// Set the background to the original image , That is, the image used for color selection
- (void)setSourceImage:(NSString *)sourceImage ImageWidth:(int)_width ImageHeight:(int)_height {
// Generates a background image of the specified size
UIImage *im = [UIImage imageNamed:sourceImage];
UIImage *newImage;
UIImageView *view = [[UIImageView alloc] initWithImage:im];
view.frame = CGRectMake(0, 0, _width, _height);
UIGraphicsBeginImageContext(CGSizeMake(_width, _height)); //size for CGSize Type, that is, the size of the image you need
[im drawInRect:CGRectMake(0, 0, _width, _height)]; //newImageRect Specifies the image drawing area
newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
width = newImage.size.width;
height = newImage.size.height;
// The background picture will be resolved into pixels for color selection
imgPixel = RequestImagePixelData(newImage);
}
// Calculation of the color
-(UIColor*)calColor:(CGPoint)aPoint {
int i = 4 * width * round(aPoint.y+imageView.frame.size.height/2) + 4 * round(aPoint.x+imageView.frame.size.width/2);
int _r = (unsigned char)imgPixel[i];
int _g = (unsigned char)imgPixel[i+1];
int _b = (unsigned char)imgPixel[i+2];
NSLog(@"(%f,%f)",aPoint.x,aPoint.y);
NSLog(@"Red : %f Green: %f Blue: %f",_r/255.0,_g/255.0,_b/255.0);
return [UIColor colorWithRed:_r/255.0f green:_g/255.0f blue:_b/255.0f alpha:1.0];
}
- (void)changColor:(UIColor *)color{
int width_;
if (![Util isIpad]) {
width_ = 30;
} else {
width_ = 70;
}
UIGraphicsBeginImageContext(CGSizeMake(width_, width_));
CGContextRef ctx = UIGraphicsGetCurrentContext();
CGContextMoveToPoint(ctx, 20, 20);
CGContextSetFillColorWithColor(ctx, color.CGColor);
if (![Util isIpad]) {
CGContextAddArc(ctx, width_/2, width_/2, 14.5, 0, 6.3, 0);
} else {
CGContextAddArc(ctx, width_/2+0.5, width_/2, 31.3, 0, 6.3, 0);
}
CGContextFillPath(ctx);
self->pickedColorImageView.image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
}
The above is the entire content of this article, I hope to help you with your study.