簡體   English   中英

無法更改UIImage中像素的顏色

[英]Unable to change the colour of pixel in UIImage

我已經通過使用其他代碼解決了我的問題。 我只想知道下一個是什么問題?

我想使用位圖數據更改UIImage中每個像素的顏色。 我的代碼如下:

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
    UIImage *image = self.imageViewMain.image;

    CGImageRef imageRef = image.CGImage;
    NSData *data        = (NSData *)CFBridgingRelease(CGDataProviderCopyData(CGImageGetDataProvider(imageRef)));
    char *pixels        = (char *)[data bytes];

    // this is where we manipulate the individual pixels
    for(int i = 1; i < [data length]; i += 3)
    {
        int r = i;
        int g = i+1;
        int b = i+2;
        int a = i+3;

        pixels[r]   = 0; // eg. remove red
        pixels[g]   = pixels[g];
        pixels[b]   = pixels[b];
        pixels[a]   = pixels[a];
    }

    // create a new image from the modified pixel data
    size_t width                    = CGImageGetWidth(imageRef);
    size_t height                   = CGImageGetHeight(imageRef);
    size_t bitsPerComponent         = CGImageGetBitsPerComponent(imageRef);
    size_t bitsPerPixel             = CGImageGetBitsPerPixel(imageRef);
    size_t bytesPerRow              = CGImageGetBytesPerRow(imageRef);

    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
    free(pixels);
    CGImageRelease(imageRef);
    CGColorSpaceRelease(colorspace);
    CGDataProviderRelease(provider);
    CGImageRelease(newImageRef);
}

但是當此代碼運行時-我得到EXC_BAD_ACCESS 錯誤 ,如下圖所示:

在此處輸入圖片說明

這是調試的更多信息:

在此處輸入圖片說明

我想念或做錯了什么?

嘗試為像素數組分配內存,例如以下代碼

char *pixels = (char *)malloc(data.length);
memcpy(pixels, [data bytes], data.length);

當不需要像素時,通過調用free(pixels)釋放此內存

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM