Ich versuche, einen Level-Editor mit Windows Forms für mein Monogame-Projekt zu erstellen und kleine pixelbasierte Bilder zu einem Bildkasten ohne Qualitätsverlust zu zeichnen, wenn skaliert. In Monogame, wenn ich dies tun muss, kann ich den Zieh-Typ einfach auf PointClamp setzen und dann wird jedes Pixel so gezeichnet, wie es ist, anstatt pixeliert zu werden, wenn gezoomt wird; Ich habe über eine Bilderbox auf so etwas gehofft. Im Moment sieht es aus wie this Aber ich würde lieber ein klareres und sauberes Bild wie this (Die zweite ist, wie es in Monogame erscheinen wird). Ich habe keinen Code dafür hochgeladen, aber nehme an, dass ich ein Bild aus dem Filestream genommen habe und den Bitmap-Konstruktor verwendet habe, um es zu skalieren (denke nicht, dass das relevant ist, aber ich werde es einfach da draußen veröffentlichen).CSharp Windows Form Picturebox Zeichne kleines Bild ohne Qualitätsverlust
Image croppedImage, image = tileMap.tileBox.Image;
var brush = new SolidBrush(Color.Black);
try { croppedImage = CropImage(image, tileMap.highlightedRect); } catch {
return; // If crop target is outside bounds of image then return
}
float scale = Math.Min(higlightedTileBox.Width/croppedImage.Width, higlightedTileBox.Height/image.Height);
var scaleWidth = (int)(higlightedTileBox.Width * scale);
var scaleHeight = (int)(higlightedTileBox.Height * scale);
try { higlightedTileBox.Image = new Bitmap(croppedImage, new Size(scaleWidth, scaleHeight)); } catch {
return; // Image couldn't be scaled or highlighted tileBox couldn't be set to desired image
}
CropImage:
private static Image CropImage(Bitmap img, Rectangle cropArea) {
return img.Clone(cropArea, img.PixelFormat);
}
private static Image CropImage(Image img, Rectangle cropArea) {
return CropImage(new Bitmap(img), cropArea);
}
Der obige Code ist meine aktuelle Methode in seiner Gesamtheit. tileMap ist ein Formular und tilebox ist die Bildbox in diesem form.image ist die vollständige Spritesheet-Textur, bevor sie auf das zugeschnitten wird, was der Benutzer markiert hat. Nach dem Beschneiden versuche ich, das Bild der aktuellen PictureBox (markiertesTileBox) auf eine vergrößerte Version des zugeschnittenen Bildes zu setzen.
wir brauchen mehr Code! – leAthlon
Okay, gib mir eine Sekunde –
@leAthlon Ich habe etwas mehr Code hinzugefügt :) –