【发布时间】:2021-08-22 22:12:33
【问题描述】:
我进行了研究,但找不到满足我确切需求的正确答案,所以我想我会试一试。
根据主题,我需要获取渲染屏幕截图的 32 x 32 块的像素,这是我最初提供像素坐标的图像区域,然后我运行检查以查看像素是否有某种颜色。播放开始时的图像将根据屏幕尺寸填满屏幕。
目前我可以成功地抓取像素,甚至评估该区域的颜色来完成我的任务。甚至还可以将其保存为 png 格式。
我遇到的问题是..像素坐标与我想在各种屏幕尺寸/纵横比上抓取像素的图像区域不相关。因为我想从图像中抓取像素的部分被缩放和移动。由于图像填满了屏幕。
这是我需要帮助的地方。如何获取与当前屏幕尺寸和纵横比匹配(或缩放)的图像区域的像素坐标(到 GetPixels)?
【问题讨论】:
-
在 Windows 10 中,您可以获得比例因子 (100%, 125%, ...) 和屏幕分辨率的显示指标。这是一个起点。
-
如果没有您的代码,很难分辨 .. 但如果您说它总是填满屏幕,您可能会使用
Camera.ScreenToViewportPoint和Camera.ViewportToScreenPoint在像素和标准化视口位置之间进行转换(从屏幕左下角 0,0 到 1,1 右上角) -
@derHugo 嗯还没有尝试过 ViewportToScreenPoint,但我确实尝试过 WorldToScreenPoint。我在图像上附加了空的游戏对象,然后尝试输入它的世界坐标。但这总是把事情搞砸,总是给出错误的图像位置,甚至偏移也无法解决。这就是为什么我现在最初手动提供像素坐标并试图找到一种如何根据屏幕尺寸进行缩放的方法。好的,我将尝试编辑我的问题以添加代码
-
好吧,我想如果你有一个屏幕分辨率,你知道像素坐标,你可以很容易地为所有拉伸的显示尺寸计算它们……或者使用 ViewportToScreenPoint,它已经为你做到了;)
标签: c# unity3d coordinates texture2d