.Netto-Zeichnung.Grafik.FromImage() liefert leeres Schwarzes Bild
Ich versuche zu skalieren hochgeladene jpeg asp.net
So, ich gehe:
Image original = Image.FromStream(myPostedFile.InputStream);
int w=original.Width, h=original.Height;
using(Graphics g = Graphics.FromImage(original))
{
g.ScaleTransform(0.5f, 0.5f); ... //e.g.
using (Bitmap done = new Bitmap(w, h, g))
{
done.Save( Server.MapPath(saveas), ImageFormat.Jpeg );
//saves blank black, though with correct width and height
}
}
dies spart virgin black jpeg, was auch immer-Datei, die ich ihm geben.
Wenn ich das Eingabe-Bild-stream sofort in done
bitmap, es tut komprimieren und speichern Sie es in Ordnung, wie:
Image original = Image.FromStream(myPostedFile.InputStream);
using (Bitmap done = new Bitmap(original))
{
done.Save( Server.MapPath(saveas), ImageFormat.Jpeg );
}
Muss ich noch etwas Magie mit g?
upd:
ich habe versucht:
Image original = Image.FromStream(fstream);
int w=original.Width, h=original.Height;
using(Bitmap b = new Bitmap(original)) //also tried new Bitmap(w,h)
using (Graphics g = Graphics.FromImage(b))
{
g.DrawImage(original, 0, 0, w, h); //also tried g.DrawImage(b, 0, 0, w, h)
using (Bitmap done = new Bitmap(w, h, g))
{
done.Save( Server.MapPath(saveas), ImageFormat.Jpeg );
}
}
gleiche Geschichte - pure black von richtigen Abmessungen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Da Sie nicht füllen Sie den Bereich mit hintergrund Bild Sie Lesen aus dem inputStream,bekommst du nur ein leeres Bild auf diese Weise.
Statt mit der Skalierung des Bildes,die Sie verwenden können, Füllt den hintergrund in einem verkleinerten Gebiet.
Check this out:
Hoffe, das hilft
Myra
Versuchen Sie dies:
- Holen Sie sich das Bild aus dem stream
- erstellen Sie eine neue Bitmap in der richtigen Größe
- Holen Sie sich das Graphics-Objekt von der neuen bitmap, nicht das original
- call-g.DrawImage(original, 0, 0, fertig.Breite, fertig.Höhe)
Bearbeiten:
Das problem ist, dieser Abschnitt:
Erstellen Sie eine schwarze bitmap mit der Auflösung angegeben durch g. Du bist nicht wirklich erstellen einer bitmap mit einer beliebigen Bild-Daten aus g. In der Tat, ich glaube nicht, dass das Graphics-Objekt tatsächlich speichert Bilddaten, die Sie wirklich passieren kann, es ist nur erlaubt Ihnen, ein Objekt zu manipulieren, das speichert die Bilddaten.
Versuchen Sie, ersetzen Sie, dass mit b.Save(...)
b.Save(...)
speichert die Bilddaten, verwandelt aber nicht gelten. Es kann leicht skaliert durch die Verwendungb=new Bitmap(original,newWidth,newHeight)
ABER ich wirklich brauchen, um eine Reihe von Transformationen, um Originalbild, einschließlich skalieren, zuschneiden und drehen, so versuchen, es zu tun durchGraphics
, und übertragen das Endergebnis in eine bitmap. Bin ich Missverständnis derGraphics
Objekt?