【问题标题】:Change color of pixel based on touch point根据触摸点改变像素颜色
【发布时间】:2013-02-17 17:51:49
【问题描述】:

我想更改用户触摸图像的颜色。我得到了一些代码来获取下面的图像数据

NSString * path = [[NSBundle mainBundle] pathForResource:@"filename" ofType:@"jpg"];
UIImage * img = [[UIImage alloc]initWithContentsOfFile:path];
CGImageRef image = [img CGImage];
CFDataRef data = CGDataProviderCopyData(CGImageGetDataProvider(image));
const unsigned char * buffer =  CFDataGetBytePtr(data);

我知道我可以轻松获得接触点,但我的问题如下

  1. 正如我们在视网膜显示中所知道的 1 点 = 2 像素,我是否知道需要为单个触摸点更改 2 像素的颜色?请纠正我如果我在任何地方错了?
  2. 如何从图像数据中获取这两个像素?

【问题讨论】:

    标签: iphone objective-c image-processing core-graphics quartz-core


    【解决方案1】:

    向呈现图像的 UIImageView 添加手势识别器。当该识别器被触发时,您关心的位置将是......

    // self.imageView is where you attached the recognizer.  This == gestureRecognizer.view
    CGPoint imageLocation = [gestureRecognizer locationInView:self.imageView];
    

    可以通过确定图像的比例因子来独立将此位置解析为像素定位设备。

    要获取图像位置,请将该比例因子应用于手势位置...

    CGPoint pixel = CGPointMake(imageLocation.x*image.scale, imageLocation.y*image.scale)
    

    这应该是访问图像的正确坐标。剩下的步骤是获取像素数据。 This post 提供了一种看起来合理的方式来做到这一点。 (也没有亲自尝试过)。

    【讨论】:

    • 根据您的建议,我做了一些更改来理解这一点。但是我们正在获取像素的图像数据。因此,要获得某个点的正确像素颜色,我们必须这样做:pixel=CGPointMake(imageLocation.ximage.scale, imageLocation.yimage.scale)。
    • 如果我的评论看起来合适,请按此编辑您的答案,以便我接受。
    • 很高兴编辑,但不确定我是否理解 - 您的 UIImage 有一个名为“缩放”的属性?
    • 是的。 UIImage 已内置属性 scale。
    • 哇。不知道为什么我以前从未见过!当然,将立即编辑。这对我和任何发现这篇文章的人来说都是一个很好的提示。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-02-20
    • 2016-05-07
    • 1970-01-01
    • 1970-01-01
    • 2016-05-18
    • 2019-11-19
    相关资源
    最近更新 更多