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

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

5个回答

/// <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);

}
    看看能不能帮到你
wjintao
wjintao 回复qq_40694726: 那你看看这个行不行
接近 2 年之前 回复
wjintao
wjintao 回复qq_40694726: /// <summary> /// 以AssetBundle方式进行加载 /// </summary> private void LoadByAB() { WWW w = new WWW("file://" + Application.streamingAssetsPath + "/Test.assetbundle"); mTex = w.assetBundle.LoadAsset<Texture2D>("Test.jpg"); Color[] colors = mTex.GetPixels(); Debug.LogFormat("pixels:{0}", colors.Length); }
接近 2 年之前 回复
qq_40694726
qq_40694726 用AssetBundle加载的资源有办法读吗?因为这是别人的项目打包过来的。。
大约 2 年之前 回复

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

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();
    }
}

}

qq_40694726
qq_40694726 不好意思,运行了也没反映,没太看懂。。还有我希望的是能获取图片的GetPixels()
大约 2 年之前 回复

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

    }

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

qq_40694726
qq_40694726 不是这个问题哦,主要是我动态加载进来的图没有读写权限,用不了GetPixels方法
大约 2 年之前 回复

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

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

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

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐