BitBlt in C# stellt nur schwarzes Bild dar



  • O.k., da GDI+ zu langsam ist, hab ich nun versucht, die Funktion BitBlt aus der WinAPI in C# einzubinden:

    using System;
    using System.Drawing;
    using System.Runtime.InteropServices;
    using System.Windows.Forms;
    
    static class Program
    {
    	[STAThread]
    	static void Main()
    	{
    		Application.Run(new MainForm());
    	}
    }
    
    class MainForm : Form
    {
    	private Bitmap bitmap = new Bitmap("Test.bmp");
    
    	public MainForm()
    	{
    		Paint += new PaintEventHandler(MainForm_Paint);
    	}
    
    	private void MainForm_Paint(object sender, PaintEventArgs e)
    	{
    #if false
    		e.Graphics.DrawImage(bitmap, 0, 0);
    #else
    		using (Graphics srcGraphics = Graphics.FromImage(bitmap))
    		{
    			IntPtr destHdc = e.Graphics.GetHdc();
    			IntPtr srcHdc = srcGraphics.GetHdc();
    
    			BitBlt(destHdc, 0, 0, bitmap.Width, bitmap.Height, srcHdc, 0, 0, 0x00CC0020);
    
    			srcGraphics.ReleaseHdc(srcHdc);
    			e.Graphics.ReleaseHdc(destHdc);
    		}
    #endif
    	}
    
    	[DllImport("gdi32.dll")]
    	private static extern bool BitBlt
    		(IntPtr hdc, int x, int y, int width, int height,
    		IntPtr srcHdc, int srcX, int srcY, int whatever);
    }
    

    Während das Graphics.DrawImage funktioniert und das Bild aus der Datei anzeigt, wird mit der BitBlt-Funktion nur ein schwarzes Bild angezeigt. Wisst Ihr, woran das liegt?


Anmelden zum Antworten