2009-08-20 10 views
3

Ich machte dies aus einem Beispiel, das ich sah, es hat nie einen Fehler geworfen, aber das Bild wird als grau angezeigt.Wie konvertiert man ein Bitmap-Bild in IntPtr in C#?

Gibt es einen besseren Weg, dies zu tun?

private unsafe void menuItem7_Click(object sender, EventArgs e) 
    { 
     var settings = Utility.GatherLocalSettings(); 

     openFileDialog1.InitialDirectory = settings.SavePath; 
     openFileDialog1.Filter = "Scan Files (*.jpg)|*.jpg"; 
     openFileDialog1.FilterIndex = 1; 
     openFileDialog1.RestoreDirectory = true; 

     if (openFileDialog1.ShowDialog() == DialogResult.OK) 
     { 
      byte[] openFile = File.ReadAllBytes(openFileDialog1.FileName); 
      fixed (byte* p = openFile) 
      { 
       IntPtr img = (IntPtr)p; 

       frmContainer newScan = new frmContainer(img); 
       newScan.MdiParent = this; 
       newScan.Text = Path.GetFileName(openFileDialog1.FileName) + " [Saved]"; 
       newScan.Show(); 
      } 
     } 

    } 

PS: Ich überprüfte die csproj, um unsicheren Code im Build zu ermöglichen.

+0

Können Sie den Code für frmContainer oder nur seinen Konstruktor, die einen IntPtr-Parameter nehmen? – MusiGenesis

Antwort

5

die Sie interessieren,

IntPtr pval = IntPtr.Zero; 
System.Drawing.Imaging.BitmapData bd = bmp.LockBits(new Rectangle(0, 0, bmp.Width, bmp.Height), ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb); 
try 
{ 
    pval=bd.Scan0; 

    ... 
} 
finally 
{ 
    bmp.UnlockBits(bd); 
} 
+3

Vergessen Sie nicht, die Bits danach zu entsperren! bmp.UnlockBits (bd); – glenneroo

+0

Zustimmen! Danke für den Kommentar. Für weitere Referenz - http://StackOverflow.com/Questions/133958/Unlockbits-lockbits-and-try-finally – adatapost

+0

Mine stürzte, bis ich das Pixelformat änderte: BitmapData bd = bmp.LockBits (new Rectangle (0, 0, bmp.Width, bmp.Height), ImageLockMode.ReadWrite, bmp.PixelFormat); –

2

Wenn ich richtig verstehe, Sie versuchen, eine .bmp-Datei zu laden. Verwenden Sie dazu einfach Image.FromFile(). Dann können Sie damit machen, was Sie wollen.

Verwandte Themen