using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.Rendering;
namespace Hont { public class Foo : MonoBehaviour { void Start() { var blueTex = new Texture2D(64, 64); for (int x = 0; x < blueTex.width; x++) for (int y = 0; y < blueTex.height; y++) blueTex.SetPixel(x, y, Color.blue); blueTex.Apply();
var mat = new Material(Shader.Find("Hidden/FooShader")); mat.SetTexture("_Image", blueTex); mat.SetVector("_ImageSize", new Vector4(blueTex.width, blueTex.height)); mat.SetPass(0); var tempRT = RenderTexture.GetTemporary(16, 16, 0, RenderTextureFormat.ARGB32, RenderTextureReadWrite.sRGB, 1); tempRT.filterMode = FilterMode.Point; tempRT.autoGenerateMips = false; tempRT.anisoLevel = 0; tempRT.wrapMode = TextureWrapMode.Clamp; var cacheRT = RenderTexture.active; RenderTexture.active = tempRT; Graphics.DrawProcedural(MeshTopology.Points, blueTex.width * blueTex.height, 1); var tex2D = new Texture2D(16, 16, TextureFormat.ARGB32, false, false); tex2D.wrapMode = TextureWrapMode.Clamp; tex2D.anisoLevel = 0; tex2D.filterMode = FilterMode.Point; tex2D.ReadPixels(new Rect(0, 0, 16, 16), 0, 0); var firstPixel = tex2D.GetPixel(0, 0); Debug.Log("firstPixel: " + firstPixel); RenderTexture.active = cacheRT; RenderTexture.ReleaseTemporary(tempRT); } } }
using System.Collections.Generic; using System.Reflection.Emit; using UnityEngine; using UnityEngine.EventSystems; using UnityEngine.Profiling; using UnityEngine.UI;
[SerializeField] private Color m_Col = Color.clear; private int[][] m_PixelArray; private Dictionary<int, TexturePixel> m_TexPixelDic = new Dictionary<int, TexturePixel>();
void Start() { m_IsDrag = false; m_UITex = GetComponent<RawImage>(); var tex = m_UITex.texture as Texture2D;
m_MyTex = new Texture2D(tex.width, tex.height, TextureFormat.ARGB32, false);
m_MyTex.SetPixels(tex.GetPixels()); m_MyTex.Apply(); m_UITex.texture = m_MyTex; int value = 0; m_PixelArray = new int[m_MyTex.width][]; for (int i = 0; i < m_PixelArray.Length; i++) { m_PixelArray[i] = new int[m_MyTex.height]; for (int j = 0; j < m_MyTex.height; j++) { m_PixelArray[i][j] = value;
m_TexPixelDic.Add(value, new TexturePixel(m_MyTex, i, j)); value++; } } }
/// <summary> /// 改变Texture2D像素点颜色 /// </summary> /// <param name="x">Texture2D像素点X轴位置</param> /// <param name="y">Texture2D像素点Y轴位置</param> /// <param name="radius">改变像素的范围</param> /// <param name="col">改变后的颜色</param> void ChangePixelColorByCircle(int x, int y, int radius, Color col) { for (int i = -Radius; i < Radius; i++) { var py = y + i; if (py < 0 || py >= m_MyTex.height) { continue; }
for (int j = -Radius; j < Radius; j++) { var px = x + j; if (px < 0 || px >= m_MyTex.width) { continue; }
if (new Vector2(px - x, py - y).magnitude > Radius) { continue; }