如何使在脚本中创建的.png文件可读,以便以后可以访问?

时间:2019-07-15 21:56:40

标签: c# image unity3d

我需要能够保存和加载可以在我正在创建的应用程序之外打开的图像,但是我创建的图像不能在下次打开项目时使用。

我当前的方法包括将可见屏幕的一部分渲染到Texture2D,然后通过EncodeToPNG()函数将其编码为.png文件。问题是,以这种方式创建的图像文件不可读,我不知道是否有可能使它们在脚本中可读。如果可以在创建图像时在脚本中启用读写功能,那对我来说将是一个不可思议的帮助。

当前代码(稍作修改以使其更具可读性):

    //set the render texture to a render texture created previously
    pictureCam.targetTexture = rendering;

    //create a new texture to hold the desired graphic
    Texture2D texture = new Texture2D(CardWidth, CardHeight, TextureFormat.RGBA32, false);

    //render to the render texture
    pictureCam.Render();
    RenderTexture.active = pictureCam.targetTexture;

    //read pixels from the render texture to the new texture2D
    texture.ReadPixels(new Rect(imageWidth, imageHeight, CardWidth, CardHeight), 0, 0);

    //create a new .png image from the texture2D (saved later) and reset the camera's target texture
    byte[] bytes = texture.EncodeToPNG();
    pictureCam.targetTexture = null;

在脚本中创建的所有新的Texture2D文件都自动启用了读写功能,因此我希望在脚本中创建的其他文件也可以启用读写功能,但是显然我的代码阻止了脚本中创建的其他图像类型。

1 个答案:

答案 0 :(得分:0)

此函数解决了我的问题,我在保存.png文件并每次加载后都调用它:

{
    //get the filename of a texture T
    string filename = AssetDatabase.GetAssetPath(T);

    //get the texture importer of the texture and set isReadable to true unless no texture is found at the filename
    TextureImporter importer = (TextureImporter)AssetImporter.GetAtPath(filename);
    if (importer != null)
        importer.isReadable = true;
    else
        Debug.Log("No Importer");
}`