what I’ve been able to do so far is to read an image as a texture2D using Resources.loadAll(“”)
and then iterate through the image using nested for loop and get each individual pixel stored into a float
I have the ability to access the the red, blue , green, alpha and even grayscale values individually but what I need to store the the black and white representation of the image that is merge the 3 layers of RBG into a single layer and get the grayscale values either 1 or 0 , how can I do that?
Texture2D[] images = Resources.LoadAll<Texture2D> ("");
float[] finalImage = new float[ images[0].width * images[0].height ];
int index = 0;
for (int i = 0; i < images [0].width; i++) {
for (int j = 0; j < images [0].height; j++) {
finalImage[index]= Mathf.Round(images [0].GetPixel (i, j).a);
if (finalImage[index] ==0 && index<100) {
Debug.Log (i + " " + j);
}
index++;
}
}
You can use a shader
Shader "Loreal/GeyScale"
{
Properties
{
_MainTex("MainTex", 2D) = "white" {}
}
SubShader
{
// No culling or depth
Cull Off ZWrite Off ZTest Always
Blend SrcAlpha OneMinusSrcAlpha
Tags{ "Queue" = "Transparent" }
Pass
{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
struct appdata
{
float4 vertex : POSITION;
float2 uv : TEXCOORD0;
};
struct v2f
{
float2 uv : TEXCOORD0;
float4 vertex : SV_POSITION;
};
v2f vert(appdata v)
{
v2f o;
o.vertex = UnityObjectToClipPos(v.vertex);
o.uv = v.uv;
return o;
}
sampler2D _MainTex;
fixed4 frag(v2f i) : SV_Target
{
fixed4 color = tex2D(_MainTex, i.uv);
float greyscaleAverage = (color.r + color.g + color.b) / 3.0f;
return greyscaleAverage;
}
ENDCG
}
}
}
Then “all you need to do” is to blit that render texture to your texture2d
RenderTexture rt = RenderTexture.GetTemporary(textureRGB.width, textureRGB.height));
Graphics.Blit(textureRGB rt, grayScaleMaterial);
textureA.ReadPixels(new Rect(0, 0, rt.width, rt.height), 0, 0, false);
// not used textureA.Apply();
Then you can use textureA.GetRawTextureData() to have an array of color and keep only the r/g/b or a of your texture…
Not sure this is the fasted way