|
分類:[C#]
C#でBitBltを使用して画像を描画したいと思い
下記のようにソースを書いてみたのですが
画像が表示されずに、真っ黒になってしまいます。
BitBltのリターンコードは1が返ってきているので
エラーでは無いと思うのですが、何処が間違っているのでしょうか?
宜しくお願いします。
namespace test
{
public partial class Form2 : Form
{
const int SRCCOPY = 0xcc0020;
[System.Runtime.InteropServices.DllImportAttribute("gdi32.dll")]
private static extern int BitBlt(
IntPtr hdcDest, // handle to destination DC (device context)
int nXDest, // x-coord of destination upper-left corner
int nYDest, // y-coord of destination upper-left corner
int nWidth, // width of destination rectangle
int nHeight, // height of destination rectangle
IntPtr hdcSrc, // handle to source DC
int nXSrc, // x-coordinate of source upper-left corner
int nYSrc, // y-coordinate of source upper-left corner
System.Int32 dwRop // raster operation code
);
Bitmap _drawImage;
Graphics _gdraw;
public Form2()
{
InitializeComponent();
_drawImage = new Bitmap(panel1.ClientSize.Width, panel1.ClientSize.Height);
_gdraw = Graphics.FromImage(_drawImage);
}
private void Form2_Load(object sender, EventArgs e)
{
Bitmap img;
img = new Bitmap(@"C:\無題1.bmp");
_gdraw.DrawImage(img, new Point());
img = new Bitmap(@"C:\無題2.bmp");
_gdraw.DrawImage(img, new Point(100,0));
}
private void panel1_Paint(object sender, PaintEventArgs e)
{
Graphics g = e.Graphics;
#if false
//DrawImageで描画
g.DrawImage(_drawImage, new Point());
#else
//BitBltで描画
IntPtr dstHDC = g.GetHdc();
IntPtr srcHDC = _gdraw.GetHdc();
int rc = BitBlt(dstHDC, 0, 0, _drawImage.Width, _drawImage.Height, srcHDC, 0, 0, SRCCOPY);
g.ReleaseHdc(dstHDC);
_gdraw.ReleaseHdc(srcHDC);
if (rc == 0)
System.Diagnostics.Debug.WriteLine("Err");
#endif
}
}
}
|