Я пытаюсь использовать растровое изображение в небезопасном контексте и наблюдаю нестабильность, например, когда программа запускается первый раз, а второй - нет. Вот код:
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 было
unhandled Message = "Попытка чтения
или запишите защищенную память. Это
часто указание на то, что другая память
поврежден. "