如何防止图像失真?

Posted

技术标签:

【中文标题】如何防止图像失真?【英文标题】:How to prevent distorted images? 【发布时间】:2018-11-04 09:48:37 【问题描述】:

我遇到的问题是我添加的图像失真。我在(1125 x 2436)为iPhone X创建了一个像素精确的背景,所以我不必使用.aspectFill.aspectFit,因为我想要一个没有黑色边框的屏幕。

我使用以下代码来创建图像:

func animateDeck() 
    let chip = SKSpriteNode(imageNamed: "Chip")
    chip.position = CGPoint(x: 300, y: 400)
    chip.zPosition = 2
    chip.setScale(1)
    gameScene2.addChild(chip)
    print("test")

有没有办法在不使用.aspectFit.aspectFill 的情况下以正确的尺寸显示图像?

now (left) and how it should be (right)

提前谢谢你!

【问题讨论】:

如果你有一个与 iPhone X 尺寸完全相同的图像,并将位置设置为view.center,你应该没问题。但是,即使它应该完美贴合,也请将其设置为 aspectFillaspectFit,以免在其他屏幕尺寸上出现失真。 尝试检查chip 是否符合您的预期大小 - 如果不是,您可以使用chip.size = CGSize(width: 1125, height: 2436) 进行设置。 我创建了一个尺寸为 1125 x 2436 的新图像。中间是 128x128 芯片。图像的其余部分是透明的。不幸的是,这不起作用。使用另一个变体gameScene2.scaleMode = .aspectFit 再次显示黑条,我想阻止它。 如果不移动背景,为什么不考虑在视图控制器而不是场景中添加UIImage 当我使用let image = UIImage(named: "Chip")时,我无法将其用作节点。所以我不能再使用SKPhysicsBody、SKAction等。 【参考方案1】:

查看this project I just made,向您展示如何创建纹理并将其应用到节点。所有你需要的都应该在GameScene.swift

另外,在您的 ViewController 中,请确保您的 GameScene 已正确初始化,如我的项目中所示,或者您是如何做到的:

gameScene2 = GameScene(size: view, bounds: size)

【讨论】:

我从不建议这样做,请将 sks 设置为 iphone x 的大小。您应该在设计场景时考虑 1 个尺寸,从长远来看,这样的编程只会伤害您。

以上是关于如何防止图像失真?的主要内容,如果未能解决你的问题,请参考以下文章

如何找到未失真的鱼眼图像和正常图像之间的差异?

如何在opencv中使用python语言清理图像中的线条并确保图像不失真

如何使用 OpenCV 使裁剪后的鱼眼图像不失真

如何使用 OpenCV 从图像中去除径向失真?

Android中的相机,如何获得最佳尺寸,预览尺寸,图片尺寸,视图尺寸,图像失真

在 VSIX 中捆绑 Visual Studio 项目模板时防止图标颜色和大小失真