Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- - (UIImage*) blankImage:(CGSize)targetSize
- {
- UIImage *inputImage = [UIImage imageNamed:@"blank.png"]; // input image to be composited over new image as example
- // create a new bitmap image context
- NSLog(@"Draw Image Called %f %f", targetSize.width, targetSize.height);
- //
- UIGraphicsBeginImageContext(CGSizeMake(targetSize.width, targetSize.height));
- // get context
- //
- CGContextRef context = UIGraphicsGetCurrentContext();
- // push context to make it current
- // (need to do this manually because we are not drawing in a UIView)
- //
- UIGraphicsPushContext(context);
- // drawing code comes here- look at CGContext reference
- // for available operations
- //
- // this example draws the inputImage into the context
- //
- [inputImage drawInRect:CGRectMake(0, 0, targetSize.width, targetSize.height)];
- // pop context
- //
- UIGraphicsPopContext();
- // get a UIImage from the image context- enjoy!!!
- //
- UIImage *outputImage = UIGraphicsGetImageFromCurrentImageContext();
- // clean up drawing environment
- //
- UIGraphicsEndImageContext();
- return outputImage;
- }
- - (void)getRGBComponents:(CGFloat [3])components forColor:(UIColor *)color {
- CGColorSpaceRef rgbColorSpace = CGColorSpaceCreateDeviceRGB();
- unsigned char resultingPixel[4];
- CGContextRef context = CGBitmapContextCreate(&resultingPixel,
- 1,
- 1,
- 8,
- 4,
- rgbColorSpace,
- kCGImageAlphaNoneSkipLast);
- CGContextSetFillColorWithColor(context, [color CGColor]);
- CGContextFillRect(context, CGRectMake(0, 0, 1, 1));
- CGContextRelease(context);
- CGColorSpaceRelease(rgbColorSpace);
- for (int component = 0; component < 3; component++) {
- components[component] = resultingPixel[component] / 255.0f;
- }
- }
- -(UIImage*) drawQRImage
- {
- NSLog(@"Draw Image Called %f %f", [theCanvas mySize].width, [theCanvas mySize].height);
- // load Image
- //
- //CGImageRef imageRef = [self blankCGImage];
- UIImage *image = [self blankImage:CGSizeMake([theCanvas mySize].width, [theCanvas mySize].height)];
- //UIImage *image = [UIImage imageNamed:@"blank.png"];
- CGImageRef imageRef = image.CGImage;
- NSData *data = (NSData *) CGDataProviderCopyData(CGImageGetDataProvider(imageRef));
- char *pixels = (char *)[data bytes];
- //unsigned long int pixelNr;
- // manipulate the individual pixels
- //
- //size_t width = [theCanvas mySize].width;
- //size_t height = [theCanvas mySize].height;
- size_t width = CGImageGetWidth(imageRef);
- size_t height = CGImageGetHeight(imageRef);
- for(int pixelNr = 0; pixelNr < width * height; pixelNr++){
- int value = [[[[[theCanvas frames] objectAtIndex:currentFrame] bitvalues] objectAtIndex:pixelNr] intValue];
- UIColor *color = [[[theCanvas pallet] colors] objectAtIndex:value];
- CGFloat components[4];
- [self getRGBComponents:components forColor:color];
- //NSLog(@"%f %f %f", components[0], components[1], components[2]);
- int red = pixelNr*4;
- int green = pixelNr*4+1;
- int blue = pixelNr*4+2;
- int alpha = 255;
- if(color == [UIColor clearColor]){
- components[0] = 1;
- components[1] = 1;
- components[2] = 1;
- alpha = 0;
- }
- // Set Pixel-Color Black
- //
- pixels[blue] = components[0]*255;
- pixels[green] = components[1]*255;
- pixels[red] = components[2]*255;
- pixels[alpha] = alpha;
- //NSLog(@"Bit Value: %d", value);
- }
- //
- // [...] deleted some unimportant code here
- //
- // create a new image from the modified pixel data
- //
- size_t bitsPerComponent = CGImageGetBitsPerComponent(imageRef);
- size_t bitsPerPixel = CGImageGetBitsPerPixel(imageRef);
- size_t bytesPerRow = CGImageGetBytesPerRow(imageRef);
- //NSLog(@"bitsPerComponent:%f bitsPerPixel bytesPerRow)
- CGColorSpaceRef colorspace = CGColorSpaceCreateDeviceRGB();
- CGBitmapInfo bitmapInfo = CGImageGetBitmapInfo(imageRef);
- CGDataProviderRef provider = CGDataProviderCreateWithData(NULL, pixels, [data length], NULL);
- CGImageRef newImageRef = CGImageCreate (
- width,
- height,
- bitsPerComponent,
- bitsPerPixel,
- bytesPerRow,
- colorspace,
- bitmapInfo,
- provider,
- NULL,
- false,
- kCGRenderingIntentDefault
- );
- // the modified image
- //
- UIImage *newImage = [UIImage imageWithCGImage:newImageRef];
- // cleanup
- //
- NSLog(@"Draw Image Processing");
- //free(pixels);
- //CGImageRelease(imageRef); // DO NOT RELEASE OR ON NEXT RUN NSData GETS EXC_BAD_ACCESS
- //CGColorSpaceRelease(colorspace);
- //CGDataProviderRelease(provider);
- //CGImageRelease(newImageRef);
- //QRcode_free(qrCode);
- //QRinput_free(input);
- // return created Image
- //
- NSLog(@"Draw Image Finished");
- return newImage;
- }
Add Comment
Please, Sign In to add comment