1.根据内存的图片生成缩略图
public void CreateThumbnail(byte[] bytes, string path)
{
int w = 125, h = 125;
Texture2D mThumbnail = new Texture2D(1, 1);
mThumbnail.LoadImage(bytes);
//mThumbnail.Scale(w, h);
Texture2D thumb = ScaleTexture(mThumbnail, w, h);
Object.DestroyImmediate(mThumbnail);
byte[] bytesThumbnail = thumb.EncodeToPNG();
System.IO.FileStream outputThumbnail = new System.IO.FileStream(path, FileMode.Create);
outputThumbnail.Write(bytesThumbnail, 0, bytesThumbnail.Length);
outputThumbnail.Flush();
outputThumbnail.Close();
Object.DestroyImmediate(thumb);
}
public void SaveToThumbnailFile(string path, byte[] bytes)
{
int w = 125;
int h = 125;
Texture2D mThumbnail = new Texture2D(1, 1);
mThumbnail.LoadImage(bytes);
//mThumbnail.Scale(w, h);
Texture2D thumb = ScaleTexture(mThumbnail, w, h);
Object.DestroyImmediate(mThumbnail);
byte[] bytesThumbnail = thumb.EncodeToJPG();
System.IO.FileStream outputThumbnail = new System.IO.FileStream(path, FileMode.Create);
outputThumbnail.Write(bytesThumbnail, 0, bytesThumbnail.Length);
outputThumbnail.Flush();
outputThumbnail.Close();
Object.DestroyImmediate(thumb);
}
public Texture2D ScaleTexture(Texture2D source, int targetWidth, int targetHeight)
{
Texture2D result = new Texture2D(targetWidth, targetHeight, source.format, false);
float incX = (1.0f / (float)targetWidth);
float incY = (1.0f / (float)targetHeight);
for (int i = 0; i < result.height; ++i)
{
for (int j = 0; j < result.width; ++j)
{
Color newColor = source.GetPixelBilinear((float)j / (float)result.width, (float)i / (float)result.height);
result.SetPixel(j, i, newColor);
}
}
result.Apply();
return result;
}
2.图片转成RGB格式
public Texture2D ConvertToRGB(Texture2D tex)
{
RenderTexture srgbRenderTex = new RenderTexture(tex.width, tex.height, 16, RenderTextureFormat.ARGB32, RenderTextureReadWrite.Linear);
Graphics.Blit(tex, srgbRenderTex);
Texture2D texFixed = new Texture2D(srgbRenderTex.width, srgbRenderTex.height);
RenderTexture.active = srgbRenderTex;
texFixed.ReadPixels(new Rect(0, 0, srgbRenderTex.width, srgbRenderTex.height), 0, 0);
texFixed.Apply();
RenderTexture.active = null;
Object.Destroy(srgbRenderTex);
return texFixed;
}