Объединить данные изображения массива байтов в один набор данных массива байтов и записать WriteAllBytes в один вывод изображения - PullRequest
0 голосов
/ 16 октября 2018

note использует .net3.5 framework .нет, я не могу использовать какой-либо класс из System.Windows.Media

Обзор

Я обнаружил необходимость сделать 4 снимка экрана с контентом на моем экране.

Контент распределяется по области, превышающей область моего экрана, которая имеет ширину 1618 пикселей и высоту 696 пикселей.

Я автоматизирую процесс создания снимков экрана из 4 областей, а затем кодирую пиксели, считанные с экрана.в байтовый массив с данными .png.

Затем я использую System.IO.File.WriteAllBytes для вывода фактических изображений PNG в папку в "Путь "

Проблема

Я получаю все мои PNG изображения в папке, и я могу успешно просмотреть все 4 изображения.Однако мне нужно, чтобы изображения были одним большим изображением.

, то есть изображение размером 3236 x на 1392 пикселя, как показано здесь .

на изображении, которое вы только что видели четырьмя 1618 пикселями иКвадраты 696px, помеченные от 1 до 4. Это представляют снимки экрана и порядок, в котором они были сделаны.

Это тот же самый точный порядок, в котором я хочу, чтобы изображения были объединены и выведены как одно изображение размером 3236 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);
}

}

Как я могу получить вывод моего единственного большого изображения?

1 Ответ

0 голосов
/ 16 октября 2018

Один из способов - превратить их в текстуры, затем использовать 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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...