Hello. I search my problem but i don't find clear answer. I use Edge Detection and try to save result to render texture then save whole data to png file.
private void CreateScreenShoot()
{
if (DataStorageBase.errorExists == true)
{
return;
}
TakeScreenshot?.Invoke(false);
camera.targetTexture = renderTexture;
camera.Render();
// read pixels will read from the currently active render texture so make our offscreen
// render texture active and then read the pixels
RenderTexture.active = renderTexture;
screenShot.ReadPixels(rect, 0, 0);
// reset active camera texture and render texture
camera.targetTexture = null;
RenderTexture.active = null;
string filename = DataStorageBase.ChosenImage;
SaveTexture(filename,screenShot, format);
TakeScreenshot?.Invoke(true);
}
private static void SaveTexture(string filename, Texture2D screenShot, ImageFormat format)
{
// pull in our file header/data bytes for the specified image format (has to be done from main thread)
byte[] fileHeader = null;
byte[] fileData = null;
if (format == ImageFormat.RAW)
{
fileData = screenShot.GetRawTextureData();
}
else if (format == ImageFormat.PNG)
{
fileData = screenShot.EncodeToPNG();
}
else if (format == ImageFormat.JPG)
{
fileData = screenShot.EncodeToJPG();
}
else // ppm
{
// create a file header for ppm formatted file
string headerStr = string.Format("P6\n{0} {1}\n255\n", screenShot.width, screenShot.height);
fileHeader = System.Text.Encoding.ASCII.GetBytes(headerStr);
fileData = screenShot.GetRawTextureData();
}
int x =filename.LastIndexOf("\\");
string name = filename.Substring(x+1);
filename = Path.Combine(DataStorageBase.MiniatureDirectory, name.Replace("svg", "png"));//DataStorageBase.MiniaturesSavingExtension);
// create new thread to save the image to file (only operation that can be done in background)
new System.Threading.Thread(() =>
{
// create file and write optional header with image bytes
var f = System.IO.File.Create(filename);
if (fileHeader != null)
f.Write(fileHeader, 0, fileHeader.Length);
f.Write(fileData, 0, fileData.Length);
f.Close();
}).Start();
}
But the problem is that i dont know how to transmit image from post process effect to camera target texture. Can anyone solve this problem and give me some advices?
↧