C#にて、BitBit関数を使用してピクチャーボックスに描画したいのですが、 なかなかうまくいきません。 ビットマップファイルを読み込んでその一部をピクチャーボックスに表示するのが目的です。 BiBit関数以外では読み込めましたが、大きな画像を扱うためさらに高速化したいために試行錯誤しております。 あまりDCなど扱ったことがないのでなかなかうまくいきません。 アドバイスいただければと思います。 よろしくお願いいたします。 以下途中まで作成したものになります。(何かが間違っていますが) using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Runtime.InteropServices; namespace WindowsFormsApplication1 { public partial class Form1 : Form { public const int SRCCOPY = 0xcc0020; [DllImport("gdi32.dll")] public static extern bool BitBlt( IntPtr hdcDst, int xDst, int yDst, int width, int height, IntPtr hdcSrc, int xSrc, int ySrc, int rasterOp ); [DllImport("user32.dll")] static extern IntPtr GetWindowDC(IntPtr hWnd); [DllImport("user32.dll")] private static extern IntPtr GetDC(IntPtr hwnd); [DllImport("gdi32.dll", ExactSpelling = true, SetLastError = true)] static extern IntPtr CreateCompatibleDC(IntPtr hdc); [DllImport("gdi32.dll", ExactSpelling = true, SetLastError = true)] static extern bool DeleteDC(IntPtr hdc); [DllImport("gdi32.dll", ExactSpelling = true, SetLastError = true)] static extern IntPtr SelectObject(IntPtr hdc, IntPtr hgdiobj); public Form1() { InitializeComponent(); String filename = @"C:\Users\PC\Desktop\test.bmp" // 画像ファイルの読み込み Bitmap bmp = new Bitmap(filename); Graphics mapGfx = Graphics.FromImage(this.pictureBox1.Image); IntPtr srcDC = mapGfx.GetHdc(); IntPtr destDC = mapGfx.GetHdc(); IntPtr hsrc = CreateCompatibleDC(hdc); IntPtr porg = SelectObject(hsrc, bmp.GetHbitmap()); BitBlt(destDC, 80, 30, bmp.Width, bmp.Height, hsrc, 0, 0, SRCCOPY); mapGfx.ReleaseHdc(destDC); mapGfx.Dispose(); src.Dispose(); } } }
分類:[.NET]