私は安全でないコンテキストでビットマップを使用しようとしています。たとえば、プログラムが最初に実行され、2回目に失敗するなどの不安定さが見られます。コードは次のとおりです。安全でないコンテキストでのビットマップ編集 - 不安定性を避けるには?
private static void RenderBitmap(Graphics g)
{
const int width = 150, height = 150;
using (Bitmap bmp = new Bitmap(width, height,
System.Drawing.Imaging.PixelFormat.Format24bppRgb))
{
Rectangle rect = new Rectangle(0, 0, bmp.Width, bmp.Height);
System.Drawing.Imaging.BitmapData bmpData =
bmp.LockBits(rect, System.Drawing.Imaging.ImageLockMode.ReadWrite,
bmp.PixelFormat);
NativeMethods.RenderText(Graphics.FromImage(bmp).GetHdc(), bmpData.Scan0,
"This works only first time round", "Segoe", 10,
new RGBA(255, 0, 0, 255), width, height);
bmp.UnlockBits(bmpData);
g.DrawImage(bmp, new Rectangle(width, height, width, -height));
}
}
これがどのように機能していないかを見ると、いくつか質問があります。ネイティブのRenderText
メソッドがビットマップメモリを直接操作していれば、私が安全で正しいことをしていますか? HDC
をビットマップから正しく取得する方法はありますか、または描画方法から渡されたパラメータg
を使用する必要がありますか?
私は取得していますエラーは、このです:。
System.AccessViolationExceptionは=は「 を読み取りまたは書き込み保護されているメモリをしようとしました。これは、多くの場合、他のメモリ が破損していることを示し ある 未処理のメッセージでした。 "
エラーは何ですか? –