Ich nähe mehrere Bilder vertikal und horizontal zusammen, um ein größeres Bild (in dem die gesamte Breite und Höhe die Summe der Breiten und Höhen der einzelnen Bilder sind) unter Verwendung von Bitmap
und System.Drawing.Graphics
in C# zu erstellen. Die Größe der einzelnen Bilder beträgt 256 px zu 256 px.DrawImage skaliert Originalbild
Wenn ich DrawImage
von System.Drawing.Graphics
verwende, warum bekomme ich eine skalierte und/oder gezoomte Version des Originalbildes?
Hier ist das Original-Bild:
Wenn ich das Bild programmatisch und schreiben abzurufen in Code-Datei, erhalte ich folgendes:
var result = httpClient.GetStreamAsync(/* url */);
var bitmap = new Bitmap(await result);
...
using (var memory = new MemoryStream())
{
using (var fs = new FileStream(/* path */, FileMode.OpenOrCreate, FileAccess.ReadWrite))
{
bitmap.Save(memory, ImageFormat.Png); // I save to .png if that makes a difference
var bytes = memory.ToArray();
await fs.WriteAsync(bytes, 0, bytes.Length);
}
}
Ich sehe keinen Unterschied. So weit, ist es gut.
Allerdings, wenn ich Bilder versuchen, horizontal zu nähen, erhalte ich folgenden:
Hinweis: Als Referenz wird das Bild oben auf die unten weit rechts im Bild genäht ist.
Es skaliert sieht, vergrößert und auf jeden Fall das Original oder programmatisch über Einzelbild nicht wie abgerufen.
Hier ist der Code, den ich verwende, um die Bilder zu nähen zusammen:
Hinweis: Wenn byWidth
true
, ich Stich horizontal Bilder.
private Bitmap MergeImages(IEnumerable<Bitmap> images, bool byWidth)
{
var enumerable = images as IList<Bitmap> ?? images.ToList();
var width = 0;
var height = 0;
foreach (var image in enumerable)
{
if (byWidth)
{
width += image.Width;
height = image.Height;
}
else
{
width = image.Width;
height += image.Height;
}
}
var bitmap = new Bitmap(width, height);
using (var g = Graphics.FromImage(bitmap))
{
var localWidth = 0;
var localHeight = 0;
foreach (var image in enumerable)
{
if (byWidth)
{
g.DrawImage(image, localWidth, 0);
localWidth += image.Width;
}
else
{
g.DrawImage(image, 0, localHeight);
localHeight += image.Height;
}
}
}
return bitmap;
}