2009-08-20 3 views
3

Я сделал это из примера, который я видел, он никогда не делал никаких ошибок, но изображение отображается как серый.Как преобразовать растровое изображение в IntPtr в C#?

Есть ли лучший способ сделать это?

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: Я проверил csproj, чтобы разрешить небезопасный код в сборке.

+0

Можете ли вы опубликовать код для frmContainer или его конструктор, который принимает параметр IntPtr? – MusiGenesis

ответ

5

Попробуйте это,

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

Не забудьте разблокировать бит после этого! bmp.UnlockBits (шд); – glenneroo

+0

Согласен! Спасибо за комментарий. Для дополнительной справки - http://stackoverflow.com/questions/133958/unlockbits-lockbits-and-try-finally – adatapost

+0

Мина рушилась, пока не изменила формат изображения: BitmapData bd = bmp.LockBits (новый Rectangle (0, 0, bmp.Width, bmp.Height), ImageLockMode.ReadWrite, bmp.PixelFormat); –

2

Если я правильно понимаю, вы пытаетесь загрузить файл .bmp. Для этого просто используйте Image.FromFile(). Затем вы можете делать все, что хотите.

Смежные вопросы