【问题标题】:Finding size of images imported at runtime查找在运行时导入的图像的大小
【发布时间】:2016-02-11 08:11:07
【问题描述】:

我目前正在运行时从存储在 XML 文件中的目录加载图像,并通过 WWW 类将它们分配给 RawImage 组件。虽然这工作正常,但图像会倾斜以适应新的纹理大小。

我想知道如何获得图像的原始大小或纵横比,以便我可以更改图像矩形的大小以适应。要导入的图像大小不同,因此使用的方法需要响应导入图像的原始大小。

任何建议将不胜感激。 [uJS中的脚本]

提前非常感谢,瑞恩

function loadContextImage(texLocation : String)
{
    if (!imageView.activeSelf)
    {
        imageView.SetActive(true);
    }

    var wwwDirectory = "file://" + texLocation; //this will probably need to change for other OS (PC = file:/ [I think?]) - **REVISE**  
    var newImgTex = new Texture2D(512, 512);

    while(true){

        var www : WWW = new WWW(wwwDirectory);

        yield www;

        www.LoadImageIntoTexture(newImgTex);

        if (www.isDone){
            break; //if done downloading image break loop
        }
    }

    var imageRender : UI.RawImage = imageView.GetComponent.<RawImage>();
    imageRender.texture = newImgTex;
}

【问题讨论】:

  • 你可以使用保留纵横比切换吗?
  • 不要使用“unityscript”,它已被弃用。换成 c#。
  • @fafase RawImage 类中似乎没有保留纵横比的方法;您指的是另一种方法吗?
  • @Joe Blow 感谢您的提示;在这个阶段我非常投入使用 uJS,但肯定会在未来的项目中使用 c#。您包含的重复链接似乎是指使用边界来获取尺寸大小。我认为这不适合我的用例,因为图像是在运行时导入的,我需要在将图像分配给 renderer.texture 之前找到图像本身的尺寸,以确保将纹理设置为适当的大小并避免上述情况宽高比不正确。

标签: image unity3d runtime unityscript dimensions


【解决方案1】:

如果您不能使用图像(出于正当理由),您可以获得纹理的宽度和高度:

WWW www = new WWW(url);
yield return www;
Texture2D tex = www.texture; 
float aspectRatio = tex.height / tex.width;
rawImage.width = width;
rawImage.height = width * aspectRatio;

这应该使图像的矩形具有适当比例的纹理。

如果您可以使用 Image 和 preserveAspectRatio,您可以通过 Unity 完成。结果不一定相同,因为它会保持盒子的尺寸并使 Sprite 在保持比例的同时占据尽可能多的空间。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-11-23
    • 2016-07-01
    • 2011-01-03
    • 2011-05-13
    • 1970-01-01
    • 2017-07-07
    • 1970-01-01
    相关资源
    最近更新 更多