qq_40694726
qq_40694726
采纳率69.2%
2018-08-07 08:39 阅读 1.8k

unity怎么读取动态加载的图片的像素颜色(急!!!另有一个同样问题80c,有用的一起给)

10

怎么打开动态加载图片的读写权限
read/write Enable 无法在项目运行时更改

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

5条回答 默认 最新

  • 已采纳
    wjintao wjintao 2018-08-08 06:27
    /// <summary>
    /// 以IO方式进行加载
    /// </summary>
    private void LoadByIO()
    {
        string ImagePath = string.Format("{0}/{1}", Application.streamingAssetsPath, "Test.jpg");
        Debug.LogFormat("ImagePath:{0}", ImagePath);
        //创建文件读取流
        FileStream fileStream = new FileStream(ImagePath, FileMode.Open, FileAccess.Read);
        fileStream.Seek(0, SeekOrigin.Begin);
        //创建文件长度缓冲区
        byte[] bytes = new byte[fileStream.Length];
        //读取文件
        fileStream.Read(bytes, 0, (int)fileStream.Length);
        //释放文件读取流
        fileStream.Close();
        fileStream.Dispose();
        fileStream = null;
    
        //创建Texture
        int width = 300;
        int height = 372;
        Texture2D texture = new Texture2D(width, height);
        texture.LoadImage(bytes);
    
        Color[] colors = texture.GetPixels();
        Debug.LogFormat("pixels:{0}", colors.Length);
    
    }
        看看能不能帮到你
    
    点赞 1 评论 复制链接分享
  • yuzp2160csdn yuzp2160csdn 2018-08-07 08:54

    加载为Texture格式就能读啊,动态加载的图片也是可以获取texture的

    点赞 评论 复制链接分享
  • qq_42800093 qq_42800093 2018-08-07 09:22

    using Unity;
    using System.Collections;

    public class SendLine : MonoBehaviour {

    public Vector3 targetPoint;
    private Transform MyTransform;
    public Texture2D TextureMap;
       void Start () 
    {
        MyTransform = GetComponent<Transform>();
       }
    
        void Update () 
      {
          sendLineMeth();
        }
    
       void sendLineMeth()
       {
        RaycastHit hit;
        if( Physics.Raycast(MyTransform.position, -MyTransform.up,out hit,10f))
        {
           targetPoint= hit.point;
           Debug.DrawLine(MyTransform.position, targetPoint);
           Vector2 pixelUV = hit.textureCoord;
           pixelUV.x *= TextureMap.width;
           pixelUV.y *= TextureMap.height;
           TextureMap.SetPixel((int)pixelUV.x, (int)pixelUV.y,Color.red);
           Debug.Log(pixelUV);
           TextureMap.Apply();
        }
    }
    

    }

    点赞 评论 复制链接分享
  • rimellya rimellya 2018-08-07 16:03

    在任何一个脚本里写这个
    public Color color1;
    public Texture2D a;
    void Update() {
    color1 = a.GetPixel(10, 20);

        }
    

    在Update每一帧都获取一次x10 y20位置的颜色
    想获得多个点可以用 a.GetPixels();

    点赞 评论 复制链接分享
  • qq_40694726 qq_40694726 2018-08-08 09:33

    找了很久最后在Unity社区上找到了原因,因为用的是AssetBundle加载资源,资源包是别人做的
    所以原因就是打包资源包的同事没有勾上可读性,所以会报错!!

    附上社区地址 https://answers.unity.com/questions/988174/create-modify-texture2d-to-readwrite-enabled-at-ru.html

    最后 wjintao 给的方法都是可行的,因为外部加载的图片默认可读。(AssetBundle默认不行是因为unity有自动标记)

    点赞 评论 复制链接分享

相关推荐