0

RGBA を設定してピクセルの色の一部を変更したい UIImage があります。変更する必要があるすべてのピクセルの CGPoints があります。RGBA 値を設定して色を変更するにはどうすればよいですか?

UIImage ピクセルの色を変更できない場合は、画像を含む UIImageView に描画しても問題ありませんが、何度も実行するので、非常にうまく機能させる必要があります。

これどうやってするの?

編集:

私は自分の問題の解決策を見つけました。これは CGPoint を赤くします:

-(void)pixelate:(CGPoint)point
{
    CGImageRef inImage = self.drawImage.image.CGImage;
    CGContextRef cgctx = [self createARGBBitmapContextFromImage:inImage];
    if (cgctx == nil) { NSAssert(NO,@"Context shouldn't be nil!"); }

    size_t w = CGImageGetWidth(inImage);
    size_t h = CGImageGetHeight(inImage);
    CGRect rect = {{0,0},{w,h}}; 

    CGContextDrawImage(cgctx, rect, inImage); 

    unsigned char* data = CGBitmapContextGetData(cgctx);
    if (data != nil)
    {
        int offset = 4*((w*round(point.y))+round(point.x));
        data[offset] = 255; //alpha
        data[offset+1] = 255; //red
        data[offset+2] = 0; //green
        data[offset+3] = 0; //blue
    }

    CGImageRef img = CGBitmapContextCreateImage(cgctx);
    UIGraphicsEndImageContext();

    CGContextRelease(cgctx);

    if (data) { free(data); }

    self.drawImage.image = [UIImage imageWithCGImage:img];
}
4

2 に答える 2

0

最初に次のファイルをインポートします.. >>>> Edited....

#import <QuartzCore/QuartzCore.h> 

CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
CGContextRef bitmContext = CGBitmapContextCreate(NULL, width, height, 8,bytesPerRow,             colorSpace, kCGBitmapByteOrderDefault | kCGImageAlphaPremultipliedFirst);
CGColorSpaceRelease(colorSpace);
CGContextDrawImage(bitmContext, (CGRect){.origin.x = 0.0f, .origin.y = 0.0f, .size.width =     originalWidth, .size.height = originalHeight}, cgImage);

基になるピクセルへの参照を取得します。

UInt8* data = (UInt8*)CGBitmapContextGetData(bitmContext);

ピクセル操作:

const size_t bitmapByteCount = bytesPerRow * originalHeight;
for (size_t i = 0; i < bitmapByteCount; i += 4)
{
UInt8 a = data[i];
UInt8 r = data[i + 1];
UInt8 g = data[i + 2];
UInt8 b = data[i + 3];

data[i] = (UInt8)newAlpha
data[i + 1] = (UInt8)newRed;
data[i + 2] = (UInt8)newGreen;
data[i + 3] = (UInt8)newBlue;
}

CGImageRef newImage = CGBitmapContextCreateImage(bitmContext);

または、このRefrenceを使用してください...

http://www.markj.net/iphone-uiimage-pixel-color/

うまくいけば、これはあなたを助ける..楽しむ

于 2012-04-23T06:51:34.060 に答える
0

私は自分の問題の解決策を見つけました。これは CGPoint を赤くします:

-(void)pixelate:(CGPoint)point
{
    CGImageRef inImage = self.drawImage.image.CGImage;
    CGContextRef cgctx = [self createARGBBitmapContextFromImage:inImage];
    if (cgctx == nil) { NSAssert(NO,@"Context shouldn't be nil!"); }

    size_t w = CGImageGetWidth(inImage);
    size_t h = CGImageGetHeight(inImage);
    CGRect rect = {{0,0},{w,h}}; 

    CGContextDrawImage(cgctx, rect, inImage); 

    unsigned char* data = CGBitmapContextGetData(cgctx);
    if (data != nil)
    {
        int offset = 4*((w*round(point.y))+round(point.x));
        data[offset] = 255; //alpha
        data[offset+1] = 255; //red
        data[offset+2] = 0; //green
        data[offset+3] = 0; //blue
    }

    CGImageRef img = CGBitmapContextCreateImage(cgctx);
    UIGraphicsEndImageContext();

    CGContextRelease(cgctx);

    if (data) { free(data); }

    self.drawImage.image = [UIImage imageWithCGImage:img];
}
于 2012-04-26T07:08:57.447 に答える