2009-04-13 14 views
2

dies ist mein Code ein byte [] Array in ein Bildich das Bild in C# umgekehrt erhalten

unsafe 
{ 
    //convert the UInt32[] into byte array and then assign the pointer to it 
    fixed (byte* ptr = Misc.ConvertFromUInt32Array(image)) 
    { 
    Bitmap bmp = new Bitmap(200,64,800, 
     PixelFormat.Format32bppRgb, 
     new IntPtr(ptr)); 
    bmp.Save("test.bmp"); 
    } 
} 

Und ich diese erhalten zu drehen:

alt text http:////img11.imageshack.us/img11/4853/testacr.png

Wo das Problem in der ist Code, warum passiert das? Wie kann ich es wieder normal machen?

+0

Sie nur ein Bild haben kann ... zeigen die umgekehrt ein, wenn Sie wählen haben. – ojblass

+0

Was passiert in Misc.ConvertFromUInt32Array (Bild)? Könnte das Problem nicht dort auftreten, anstatt das kleine Stück Code, das das Bild speichert? – Xiaofu

Antwort

7
bmp.RotateFlip(RotateFlipType.Rotate180FlipX); 

das Problem behoben :)

+0

Der Held, den wir verdienen – sam

1

Hey, es sieht so aus, als ob die zwei Bilder, die du gepostet hast, in keiner Weise verwandt sind (abgesehen davon, dass sie ein ähnliches Muster der Verschleierung haben). Hast du die falschen Dateien hochgeladen?

In Bezug auf das Problem, das Sie sehen, würde ich vermuten, dass Sie ein Problem mit dem Ursprung der x-y-Achse sehen. Normale Bild- und Grafik-APIs verwenden eine leicht seltsame Achse, an der Sie die y-Achse "runter" zählen, dh der Punkt (0, 0) befindet sich oben links auf dem Bildschirm und wenn Sie y erhöhen, gehen Sie nach unten Bildschirm. Daher liegt es nahe anzunehmen, dass Sie bei der Konvertierung einen Fehler gemacht haben oder dass die beiden Bilder ein anderes y-Achsenschema verwenden.

+0

Nein, ich denke nicht. Das Problem muss in der "bmp" -Linie sein. Einige Leute sagten, dass das Problem in schreite (der Parameter sollte negativ sein), aber es ist nicht da. –

+0

Über welche "bmp" -Linie sprichst du? "Stride" steht auf einer der Zeilen, die "bmp" enthalten –

1

Warum bei all diesen unsicheren Sachen nicht ersetzen:

private static Bitmap ConvertFromBytes(Byte[] imagebytes) 
{ 
    return new Bitmap(new MemoryStream(imagebytes)); 
} 
+0

Weil imageBytes den Bitmap-Header nicht enthält. – Samuel