Я вижу несколько неоптимальных вещей в коде, но, честно говоря, ни одну вещь, которая может дать такой результат. Единственный способ получить такие проблемы - это если вы go возитесь с необработанным бэкэндом и выполняете операции, которые портят то, как данные интерпретируются как образ.
Только две указанные c вещи, которые Нужно исправить в коде вроде:
- Установка разрешения всех изображений на одинаковые значения. Это влияет на то, насколько большими они нарисованы, и, таким образом, может испортить расположение
- Закрытие объекта
Graphics
после того, как вы закончите с ним, поэтому все изменения будут подтверждены до того, как вы попытаетесь что-либо сохранить.
Обратите внимание, что в моем скорректированном коде images
- это просто List<Bitmap>
, а for-l oop просто перебирает их всех. Вы никогда не указывали тип вашей коллекции Images
, и мне было гораздо проще ее проверить.
Int32 width = Images.First().Width;
Int32 height = 0;
for (Int32 i = 0; i < Images.Count; i++)
{
height += Images[i].Height;
}
Bitmap bitmap2 = new Bitmap(width, height);
bitmap2.SetResolution(72, 72); // <-- Set explicit resolution on bitmap2
// Always put Graphics objects in a 'using' block.
using (Graphics g = Graphics.FromImage(bitmap2))
{
height = 0;
for (Int32 i = 0; i < Images.Count; i++)
{
Bitmap image = Images[i];
image.SetResolution(72, 72); // <-- Set resolution equal to bitmap2
g.DrawImage(image, 0, height);
height += image.Height;
}
}
bitmap2.Save(@"C:\Users\user\Desktop\test\test.png", ImageFormat.Png);