Swift 3:获取 UIImage 中像素的颜色(更好:UIImageView)

2024-01-03

我尝试了不同的解决方案(例如this one https://stackoverflow.com/questions/25146557/how-do-i-get-the-color-of-a-pixel-in-a-uiimage-with-swift),但我得到的颜色看起来与真实图像有点不同。我想这是因为图像只是RGB, not RGBA。这可能是一个问题吗?

相关问题:如果 UIImage 有contentMode = .scaleAspectFill,我是否必须重新计算图像,或者我可以使用imageView.image?

EDIT:

我尝试使用这个扩展:

extension CALayer {
    func getPixelColor(point: CGPoint) -> CGColor {
        var pixel: [CUnsignedChar] = [0, 0, 0, 0]

        let colorSpace = CGColorSpaceCreateDeviceRGB()
        let bitmapInfo = CGBitmapInfo(rawValue: CGImageAlphaInfo.premultipliedLast.rawValue)

        let context = CGContext(data: &pixel, width: 1, height: 1, bitsPerComponent: 8, bytesPerRow: 4, space: colorSpace, bitmapInfo: bitmapInfo.rawValue)

        context!.translateBy(x: -point.x, y: -point.y)

        self.render(in: context!)

        let red: CGFloat   = CGFloat(pixel[0]) / 255.0
        let green: CGFloat = CGFloat(pixel[1]) / 255.0
        let blue: CGFloat  = CGFloat(pixel[2]) / 255.0
        let alpha: CGFloat = CGFloat(pixel[3]) / 255.0


        let color = UIColor(red:red, green: green, blue:blue, alpha:alpha)

        return color.cgColor
    }
}

但对于某些图像来说,坐标系似乎被翻转了,对于其他图像,我得到了非常错误的值......我在这里错过了什么?

EDIT 2:

我尝试使用这些图像:

https://dl.dropboxusercontent.com/u/119600/gradient.png https://dl.dropboxusercontent.com/u/119600/gradient.png https://dl.dropboxusercontent.com/u/119600/[电子邮件受保护] https://dl.dropboxusercontent.com/u/119600/gradient@2x.png

但我确实得到了错误的价值观。它们嵌入在一个UIImageView但我转换坐标:

private func convertScreenPointToImage(point: CGPoint) -> CGPoint {
    let widthMultiplier = gradientImage.size.width / UIScreen.main.bounds.width
    let heightMultiplier = gradientImage.size.height / UIScreen.main.bounds.height

    return CGPoint(x: point.x * widthMultiplier, y: point.y * heightMultiplier)
}

This one

给我=== Optional((51, 76, 184, 255))在 iPhone 7 模拟器上运行时,这是不正确的......


我写的是这是一个游乐场。我用指针索引图像数据并获取 rgba 值:

func pixel(in image: UIImage, at point: CGPoint) -> (UInt8, UInt8, UInt8, UInt8)? {
    let width = Int(image.size.width)
    let height = Int(image.size.height)
    let x = Int(point.x)
    let y = Int(point.y)
    guard x < width && y < height else {
        return nil
    }
    guard let cfData:CFData = image.cgImage?.dataProvider?.data, let pointer = CFDataGetBytePtr(cfData) else {
        return nil
    }
    let bytesPerPixel = 4
    let offset = (x + y * width) * bytesPerPixel
    return (pointer[offset], pointer[offset + 1], pointer[offset + 2], pointer[offset + 3])
}

let image = UIImage(named: "t.png")!
if let (r,g,b,a) = pixel(in: image, at: CGPoint(x: 1, y:2)) {
    print ("Red: \(r), Green: \(g), Blue: \(b), Alpha: \(a)")
}

请注意,如果您在作为 UIImageView 属性的 UIImage 上使用它,则像素坐标是原始分辨率下的实际图像的像素坐标,而不是缩放后的 UIImageView 的屏幕坐标。它还尝试使用 RGB Jpg 和 RGBA PNG,并且两者都作为 32 位 RGBA 图像导入,因此它适用于两者。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Swift 3:获取 UIImage 中像素的颜色(更好:UIImageView) 的相关文章

  • UIButton 与 UITableViewCell 中的 UIImages - 重叠等

    我的 UITableViewCell 有问题 我正在开发一个应用程序 其中提要中的某些帖子可能包含图像 并且单击的按钮还需要包含一个 标签 编号 具体取决于它位于表格的哪一行 因为我下载了一组图像 问题出在我滚动 正如您已经猜到的 表格时
  • 从 RGBA 像素字节数据重建 UIImage 时出现问题

    我需要从单个灰度图像 红色 橙色 黄色等 创建 12 个彩色图像 源图像实际上是PNG RGBA 我正在使用我找到的一个库 https github com PaulSolt UIImage Conversion https github
  • 在 XCODE 中简单调整 UIImage 的大小

    有什么办法可以用尽可能少的行来调整 UIImage 的大小吗 我不介意比例 我只想将图像分辨率设置为 80x60 就这样 这可能有点过分了 但是 您可以简单地获取图像 并以您想要的分辨率创建图形上下文 然后您可以将 tempImage 设置
  • UILabel 文本末尾的 UIImage

    如果 UILabel 中有超过 1 行文本 如何找到 UILabel 中最后一个字符的坐标 我想在文本末尾添加图像 我想你正在寻找NSTextAttachment create an NSMutableAttributedString le
  • UIImage 减少字节大小

    我正在使用以下代码来调整图像大小 一切正常且符合预期 以正确的方式调整 UIImage 的大小 http vocaro com trevor blog 2009 10 12 resize a uiimage the right way 我使
  • UIImageView 中的视网膜/非视网膜图像

    我的应用程序中有一个 300 x 300 大小的 UIImageView 它可以很好地显示我的图像 我的图像都是 600 x 600 或更大 UIImageView 只是为我调整它们的大小 我的问题是 由于这些图像本质上都是视网膜图像 即所
  • 已发布的应用程序显示空白屏幕,但在调试器中不显示

    我有这个应用程序 最初是为 iOS 2 x 编写的 我最近需要添加一个小功能 并被迫制作该应用程序 该应用程序在多次 iOS 升级中都没有任何问题 并且兼容 iOS5 仅在测试并提交该应用程序后 我才收到 300 000 多名用户群的报告
  • Titanium ImageView 无法显示图像?

    我在 UI 文件夹中的项目中创建了一个图像目录来放置我的图像 所以目前完整路径是Resources UI Images 当我创建图像视图时 它不会显示图像 我尝试了不同的选项 甚至是网络图像 但没有任何效果 var self Ti UI c
  • 如何以编程方式更改 UISlider 拇指图像的大小

    我想制作自定义 UISlider 像这样的东西 o gt O gt the thumbImage在最小值时会很小 滑块值增加时会增加尺寸 否则会减小 有人知道该怎么做吗 您可以使用此代码 UIImage imageWithImage UII
  • MKOverlayRenderer 在地图视图上显示 UIImage

    我正在尝试在 iOS 7 中的地图视图上显示图像 我将 MKOverlayRenderer 子类化如下 MapOverlayRenderer h import
  • 如何在 UIImageView 之上添加交互式 UILabels?

    我需要在上面添加一些标签UIImageView 可以通过点击标签来更改标签的文本 实现这一目标的最佳方法是什么 我正在使用 Swift 编程语言 在 stackoverflow 上查找一些解决方案 我发现了一些使用的演练String dra
  • Swift 3:从 UIBezierPath 创建 UIImage

    我有一个UIBezierPath 我最终需要一个UIImageView从中 现在我正在尝试首先创建一个UIImage 然后是一个UIImageView从那 我正在快速工作 并且我已经研究过类似的问题 并且答案要么不起作用 要么产生形状而不是
  • 组合多个 UIImageView 并保持分辨率

    我正在设计一个应用程序 用户可以将多个 UIImageView 一个一个地放置 当用户决定将其保存到相册时 我必须组合所有这些 UIImageView 并将其保存到照片库 在组合它们时 我需要保留它们的位置 分辨率 zorder 我尝试的方
  • 在 UIImage imageNamed 中使用外部图像

    我正在从网上下载两张图片 Apple png 和 电子邮件受保护 cdn cgi l email protection 我想用 UIImage imageNamed Apple png 因此它可以使用内置功能来检测是否应该显示 Apple
  • 我们有什么理由不使用 UIImageView 的子类吗?

    我目前正在尝试创建 UIImageView 的子类 以便使其从服务器异步下载图像 我尝试自己做 但还没有走得太远 D 不管怎样 我环顾四周 发现了这个 异步图像下载 http www markj net iphone asynchronou
  • 在 UIImageView 后面创建阴影的最佳方法是什么

    我有一个 UIImageView 我想在它后面添加阴影 我希望苹果公司拥有这一财产 但他们必须让我们程序员做很多事情变得困难 所以我需要问这个问题 有一种更好 更简单的方法可以做到这一点 UIImageView继承自UIView 因此它具有
  • 将白色反转为黑色 uiimage

    我有以下 UIImage 使用 Objective C 我希望能够将白色反转为黑色 反之亦然 任何帮助 将不胜感激 Swift Using CIContext代替 UIImage CIImage see https stackoverflo
  • 更改 UIImage 的对比度、亮度、饱和度或颜色

    我正在寻找一种修改某些元素的好方法UIImage例如亮度 对比度 饱和度 对于彩色图像 和颜色 着色 现在我使用每像素操作 但它不是很快 对于图像中的每个像素 我修改对比度 亮度等的颜色数据 我使用来自UI图像调整 https github
  • 用于通过 Apple 登录的自定义圆形按钮

    我遵循 Apple 的指南来实施 使用 Apple 登录 按钮 苹果在文档中表示 也可以仅使用徽标来创建 使用Apple登录 的自定义按钮 您也可以更改图像的形状以具有圆形按钮 为了能够编辑图像 它还提供插入蒙版 但我不明白我们必须为按钮或
  • 如何捕获 Scrollview 内的缩放 UIImageView 进行裁剪?

    问题 缩小图像进行裁剪就可以了 放大图像后进行裁剪会显示应有的图像上方的图像 我在那里的 yOffset 是因为我想要的裁剪方块从滚动视图的下方开始 Code CGRect rect float yOffset 84 rect origin

随机推荐

  • 在 Eclipse Indigo 中运行 MPJ Express 时出现“未解决的编译问题”

    我遵循了 Youtube 上关于如何在 IDE 中使用 MPJ Express 运行并行应用程序的教程 我下载了最新版本的 MPJ Express 并使用了 Eclipse Indigo 我确实在我的项目 JAR 文件中包含了 MPI 当我
  • FXML 文档的 Netbeans 8.2 自动完成始终显示“无建议”

    我第一次在 Netbeans 8 2 中创建 JavaFX 项目 FXML 文档的自动完成功能始终显示 无建议 例如 我见过类似的问题 例如Netbeans7 1 和 JavaFX 2 0 FXML 代码完成不起作用 https stack
  • Gradle 6.0 打破了源集依赖

    我在这里为学生收集了一些课程 https github com emign engineEmi Lektionen tree master https github com emign engineEmi Lektionen tree ma
  • 在左下角/右下角创建两个按钮

    JButton button1 new JButton Button 1 JButton button2 new JButton Button 2 JFrame frame new JFrame frame getContentPane s
  • 引用 github 存储库中的 .css 文件作为 .html 文件中的样式表

    我在 github 上有一个存储库 其中有一个 css 文件 有什么方法可以让 github 以我可以在网页中使用它的方式提供该文件吗 换句话说 我希望能够从本地计算机或实时域上的 HTML 文件直接引用 github 上的此源文件 就像是
  • Java 中的贪吃蛇游戏,但我的重启按钮不起作用

    我的游戏重启按钮不起作用 点击它时它会倍增 我不太了解 Java 我认为自己很好 游戏主要内容 package snake game public class snake public static void main String arg
  • 选择各种嵌套容器中的最后一个元素

    如何选择 CSS 中最后一个也是最深的元素 有没有办法改进这个CSS代码 对于深树 您提出什么解决方案 15 25 我避免使用 JavaScript 但 SASS 解决方案是受欢迎的 也许使用 for level 1 div case gt
  • Dispatcher.BeginInvoke 问题

    我收到此代码的 非静态字段 方法或属性 System Windows Threading Dispatcher BeginInvoke System Action 需要对象引用 private void ResponseCompleted
  • 使用 AutoCloseable 关闭多个资源(try-with-resources)

    我知道 如果资源实现了 AutoCloseable 则您尝试传递的资源将自动关闭 到目前为止 一切都很好 但是 当我有多个想要自动关闭的资源时 我该怎么办 套接字示例 try Socket socket new Socket input n
  • 命名空间对性能有害吗? (PHP)

    我对 php 框架进行了一些更改以支持名称空间 但结果并不符合预期 对于简单的测试 主要加载框架类 执行时间减慢了约 10 根据您的经验 在大型应用程序上使用命名空间是否值得 考虑PHP的实际开发水平 已接受的答案php 命名空间基准测试
  • AWS将elb的8000端口转发到EC2的8000端口

    我有一个 ELB 其中在目标组中注册了多个 EC2 实例 我正在使用一个运行正常的 php 应用程序端口 它有 SSL 我想将端口 8000 用于我的节点应用程序 我想做的是将 my elb address 8000 转发到 any ec2
  • 根据元组的值对Python中的元组进行排序[重复]

    这个问题在这里已经有答案了 我正在尝试使用以下代码打印最常见的 10 个单词 但是 它不起作用 关于如何修复它有什么想法吗 def reducer count words self word counts send all num occu
  • 关于搜索引擎抓取我应该了解什么?

    我指的不是 SEO 的事情 我应该知道什么 例如 引擎运行 JavaScript 吗 他们使用cookies吗 cookie 是否会跨爬行会话进行 例如今天的 cookie 和下周或下个月的爬行 选定的 JS 过滤器是否因某种原因未加载 例
  • 请解释一下该程序中的逗号运算符

    请解释一下该程序的输出 int main int a b c d a 10 b 20 c a b d a b printf nC d c printf nD d d 我得到的输出是 C 10 D 20 我的疑问是 运算符在这里做什么 我使用
  • B 树与二叉树

    如果我使用 b 树实现内存 RAM 搜索操作 那么与二叉树相比 它在缓存或其他一些效果方面会更好吗 我所知道的是 binary search tress O log n btrees O c log n 各种博客上对此进行了很多讨论 Alg
  • Fluent Nhibernate - 选择特定列并使用分组进行计数查询

    我在流畅的 nhibernate 中执行查询时遇到一些问题 我有一个表 书籍 包含以下列 ID NAME YEAR BOOK TYPE AUTHOR ID 我想在 Fluent NHibernate 中执行以下 sql 查询 SELECT
  • 如何在 Android 手机图库中实用地获取图像的所有详细信息

    我正在尝试获取手机图库中图像可用的所有详细信息 特别是位置 当用户单击详细信息时 这些信息将会出现 所以请告诉我该怎么做 请参阅屏幕截图以更好地理解 提前致谢 你应该去Exif接口 http developer android com re
  • 使用逻辑运算符索引 numpy 数组

    我有一个 2d numpy 数组 例如 import numpy as np a1 np zeros 500 2 a1 0 np arange 0 500 a1 1 np arange 0 5 1000 2 could be also re
  • 将我的网站与 Google 日历集成

    我正在用 PHP 开发一个网站 该网站的用户可以从我提供的日历中进行预约 当用户进行预订时 应将其添加到我的谷歌日历中 对于这种情况 我需要什么样的身份验证机制 以下哪一项 1 网络应用程序 2 服务账户 3 安装的应用程序 注意 我不想访
  • Swift 3:获取 UIImage 中像素的颜色(更好:UIImageView)

    我尝试了不同的解决方案 例如this one https stackoverflow com questions 25146557 how do i get the color of a pixel in a uiimage with sw