准确地从屏幕上的像素获取颜色并转换其颜色空间

2024-05-21

我需要从屏幕上的像素获取颜色并转换其颜色空间。我遇到的问题是,将值与数字色度计应用程序进行比较时,颜色值不相同。

// create a 1x1 image at the mouse position
if let image:CGImage = CGDisplayCreateImage(disID, rect: CGRect(x: x, y: y, width: 1, height: 1))
{
    let bitmap = NSBitmapImageRep(cgImage: image)

    // get the color from the bitmap and convert its colorspace to sRGB
    var color = bitmap.colorAt(x: 0, y: 0)!
    color     = color.usingColorSpace(.sRGB)!

    // print the RGB values
    let red = color.redComponent, green = color.greenComponent, blue = color.blueComponent
    print("r:", Int(red * 255), " g:", Int(green * 255), " b:", Int(blue * 255))
}

我的代码(转换为 sRGB):255, 38, 0
数字色度计 (sRGB):255, 4, 0

如何从屏幕上的像素中获取具有正确色彩空间值的颜色?


Update:

如果您不将颜色空间转换为任何内容(或将其转换为校准RGB),则当设置为“显示本机值”时,这些值将与数字色度计的值相匹配。

我的代码(未转换):255, 0, 1
数字色度计(设置为:显示原始值):255, 0, 1

那么,为什么当颜色值与 DCM 应用中的原生值匹配时,将颜色转换为 sRGB 并将其与 DCM 的值(以 sRGB 为单位)进行比较却不匹配?我也尝试过转换为其他色彩空间,但总是与 DCM 不同。


好的,我可以告诉您如何修复它/匹配 DCM,您必须确定这是否正确/错误/等等。

看来返回的颜色是colorAt()具有与位图像素相同的分量值,但具有不同的颜色空间 - 它是通用 RGB 颜色空间,而不是原始设备颜色空间。我们可以通过在位图空间中构建颜色来“纠正”这个问题:

let color = bitmap.colorAt(x: 0, y: 0)!

// need a pointer to a C-style array of CGFloat
let compCount = color.numberOfComponents
let comps = UnsafeMutablePointer<CGFloat>.allocate(capacity: compCount)
// get the components
color.getComponents(comps)
// construct a new color in the device/bitmap space with the same components
let correctedColor = NSColor(colorSpace: bitmap.colorSpace,
                             components: comps,
                             count: compCount)
// convert to sRGB
let sRGBcolor = correctedColor.usingColorSpace(.sRGB)!

我想你会发现correctedColor追踪 DCM 的原生价值观以及sRGBcolor跟踪 DCM 的 sRGB 值。

请注意,我们是建造设备空间中的颜色,而不是转换设备空间的颜色。

HTH

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

准确地从屏幕上的像素获取颜色并转换其颜色空间 的相关文章

随机推荐

  • Ctrl + Space 不适用于 Eclipse 上的内容辅助

    我的问题是点击后不会弹出内容辅助窗口Ctrl Space 我检查了我的快捷方式 内容辅助必然会Ctrl Space 有时 例如在输入点后 窗口会自动弹出提出建议 但使用组合键时不会发生这种情况 日食版本 面向 Web 开发人员的 Eclip
  • 将图像保存到内部存储器并将出现在图库中

    我搜索了很多与我的问题相关的问题 是否有办法将图像存储在内存中并且它也应该出现在图库中 这是完全有可能的 我以前也这么做过 在将图像保存到内存 或称为应用程序文件夹等 之前 您最好设置Context MODE WORLDREADABLE 虽
  • React Native Android:app:compileDebugJava 错误

    当我运行react native run android时 出现以下错误 我正在将其设置为在设备上运行 app compileDebugJava Users hello MediaFire apps test2 android app sr
  • Switch 语句,其中 value 为 Int 但 case 可以包含数组 [重复]

    这个问题在这里已经有答案了 我想将我的值数组作为 switch 语句的案例 我有一个值数组 let intValues 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 100 我想使用
  • SVG 转 JPG / PNG

    有没有工作模块可以convert a SVG image into像素格式如JPEG or PNG 看看蜡染工具包 具体来说是光栅化器 http xmlgraphics apache org batik tools rasterizer h
  • Mac OS X 中文件系统的 Unicode 编码在 Python 中不正确?

    在 OS X 和 Python 中处理 Unicode 文件名有点困难 我试图在代码中稍后使用文件名作为正则表达式的输入 但文件名中使用的编码似乎与 sys getfilesystemencoding 告诉我的不同 采取以下代码 usr b
  • Java - toString 到 Color

    我一整天都在努力解决这个问题 基本上我做了一个 for 循环 将条目添加到数组列表中 其中一项是 颜色 变量 我已经用过random nextInt为颜色构造函数的红色 绿色和蓝色部分创建新值 我还设置了一个toString方法 这样我就可
  • Java时间转正常格式

    我有 Java 时间1380822000000 我想转换为我可以阅读的内容 import java util Date object Ws1 val a new Date 1380822000000 toString 导致异常 warnin
  • Python 中的流式传输管道

    我正在尝试使用 Python 将 vmstat 的输出转换为 CSV 文件 因此我使用类似的方法转换为 CSV 并将日期和时间添加为列 vmstat 5 python myscript py gt gt vmstat log 我遇到的问题是
  • Azure Active Directory - 自定义策略错误

    我已按照此处提供的指南在 Azure AD B2C 中设置了自定义策略 https learn microsoft com azure active directory b2c active directory b2c setup sf a
  • 如何在 xcode 中使用相同的 nib 文件创建多个窗口

    我有一个使用表格视图作为界面的 iPhone 应用程序 每次用户点击其中一个表格单元格时 我想向用户显示另一个窗口 然而 我推入导航控制器的窗口的用户界面非常相似 因此 我决定制作一个 通用 nib 文件 以便在该通用 nib 文件的文件所
  • 从 iFrame 嵌入 API 获取 YouTube 视频信息

    我正在使用 YouTube iFrame API 嵌入视频并创建一个简单的自定义播放器 我正在寻找视频标题 描述 等 无需再次调用 YouTube 即可获取信息 我无法找到任何相关信息 有什么想法 或者我是否需要额外拨打电话来获取视频信息
  • 工作日重新订购 Pandas 系列

    使用 Pandas 我提取了一个 CSV 文件 然后创建了一系列数据来找出一周中哪几天崩溃最多 crashes by day bc DAY OF WEEK value counts 然后我将其绘制出来 但当然它按照与该系列相同的排名顺序绘制
  • 无法将 std::min 传递给函数,std::min 的副本有效

    Passing std min函数无法编译 我复制了 libcpp 声明std min进入我的源文件并且它可以工作 std 版本有什么问题 clang 和 gcc 也会发生同样的情况 在 Godbolt 上测试 https godbolt
  • Pinterest 拒绝来自 Google App Engine 的访问 (403)

    使用 oauth accessToken 我可以通过以下方式检索用户的信息 https api pinterest com v1 me fields first name 2Cid 2Clast name 2Curl 2Cusername
  • 使用 Hibernate Criteria 过滤 Map 中的键和值

    我有以下持久类 public class Code ElementCollection targetClass CodeValue class MapKeyClass CodeProperty class JoinTable name co
  • c# 从另一个类中的另一个静态事件引发事件

    需要帮助从另一个班级调用事件 我有已声明事件的课程 public class MxPBaseGridView GridView public event AddNewItemsToPopUpMenuEventHandler AddNewIt
  • sklearn 中的 pca.inverse_transform

    将我的数据拟合后 X 我的数据 pca PCA n components 1 pca fit X X pca pca fit transform X 现在 X pca 具有一维 当我根据定义执行逆变换时 它不是应该返回原始数据 即 X 二维
  • 如何在 Perl 中循环访问类的所有方法?

    如何在 Perl 中循环访问一个类的所有方法 有没有关于 Perl 内省或反射的好的在线参考 Todd Gardner 使用 Moose 的建议很好 但他选择的示例代码并不是很有帮助 如果你正在检查一个非 Moose 使用类 你会这样做 u
  • 准确地从屏幕上的像素获取颜色并转换其颜色空间

    我需要从屏幕上的像素获取颜色并转换其颜色空间 我遇到的问题是 将值与数字色度计应用程序进行比较时 颜色值不相同 create a 1x1 image at the mouse position if let image CGImage CG