注释使用.net3.5框架。不,我不能使用System.Windows.Media
中的任何类概述
我发现需要在屏幕上拍摄4个内容的屏幕截图。
内容分布在比我的屏幕区域大的区域,该区域宽1618像素,高696像素。
我将对4个区域进行截图的过程自动化,然后将从屏幕读取的像素编码为具有.png数据的字节数组。
然后我使用System.IO.File.WriteAllBytes
将实际的png图像输出到“路径”
问题
我确实将所有png图像输出到一个文件夹中,并且我可以成功查看所有4张图像。但是我需要这些图像是一张大图像。
即显示3236 x乘1392px的图像,如here所示。
在图像中,您刚刚看到四个1618px by和696px正方形,分别标记为1到4。这分别表示屏幕截图和拍摄顺序。
我希望这些图像能够以3236 x x 1392px的单个图像组合并输出的相同顺序。
在该课程中的。假设图像1,2、3和4的字节数据已经分配给它们各自的字节数组。
class SimplePseudoExample
{
private byte[] bytes1;
private byte[] bytes2;
private byte[] bytes3;
private byte[] bytes4;
private byte FinalByes[];
void CreateTheSingleLargeImage()
{
System.IO.File.WriteAllBytes("Path"+".png",FinalByes);
}
}
我如何获得单个大图像输出?
答案 0 :(得分:1)
一种方法是将它们变成纹理,然后使用getPixels
和setPixels
进行合并。
tex1 = new Texture2D(2, 2);
ImageConversion.LoadImage(tex1, bytes1);
tex2 = new Texture2D(2, 2);
ImageConversion.LoadImage(tex2, bytes2);
tex3 = new Texture2D(2, 2);
ImageConversion.LoadImage(tex3, bytes3);
tex4 = new Texture2D(2, 2);
ImageConversion.LoadImage(tex4, bytes4);
outTex = new Texture2D(tex1.width * 2, tex1.height * 2);
// we could use tex1.width,tex1.height for everything but this is easier to read
// setPixels bottom-left is 0,0
// bottom-left
outTex.setPixels(0,0,
tex3.width,tex3.height,
tex3.getPixels());
// bottom-right
outTex.setPixels(tex3.width,0,
tex4.width,tex4.height,
tex4.getPixels());
// top-left
outTex.setPixels(0,tex3.height,
tex1.width,tex1.height,
tex1.getPixels());
// top-right
outTex.setPixels(tex3.width, tex3.height,
tex2.width,tex2.height,
tex2.getPixels());
byte[] outBytes = outTex.EncodeToPNG();