У вас есть одинарные кавычки в строке, разделенные одинарными кавычками:
'SELECT * FROM foo WHERE id = '123''
Вам нужно их избежать. IIRC, Postgres использует двойные синглы, чтобы сделать это:
'SELECT * FROM foo WHERE id = ''123'''
Или, возможно, обратный слеш:
'SELECT * FROM foo WHERE id = \'123\''
Это смотрит на меня как Вы, всегда пытаются скопировать число байтов myByteArray. Длина к растровому буферу.
Вы не проверяете, что растровый буфер является на самом деле столь же большим, как тот - так, вероятно, списывают конец растрового буфера.
Попытайтесь проверить если myByteArray. Длина еще больше, чем bmpData. Шаг x bmp. Высота
Если это верно, необходимо будет повторно посмотреть на предположения, которые Вы сделали со своими твердыми кодированными значениями для ширины, высоты и формата пикселя.
Вы не должны копировать все изображение сразу. Выделение памяти растрового объекта не могло бы быть тем, что Вы ожидаете. Например, первая строка развертки может быть сохранена в последний раз в памяти, которая означала бы, что данные для второй строки развертки закончатся вне выделенной области памяти для растрового объекта. Также там может дополнять между строками развертки для размещения их в даже адрес.
Скопируйте одну строку за один раз, с помощью bmpData. Шаг для нахождения следующей строки развертки:
int offset = 0;
long ptr = bmpData.Scan0.ToInt64();
for (int i = 0; i < Height; i++) {
Marshal.Copy(myByteArray, offset, new IntPtr(ptr), Width * 3);
offset += Width * 3;
ptr += bmpData.Stride;
}
Ответ для меня: забыл ->
// Unlock the bits right after Marshal.Copy
bmp.UnlockBits(bmpData);
Кто-нибудь догадался? Речь идет о четвертой странице без ответа. Используя точный код из msdn: http://msdn.microsoft.com/en-us/library/system.drawing.imaging.bitmapdata.aspx, а именно:
Bitmap bmp = new Bitmap("c:\\picture.jpg");
// Lock the bitmap's bits.
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);
// Get the address of the first line.
IntPtr ptr = bmpData.Scan0;
// Declare an array to hold the bytes of the bitmap.
int bytes = bmpData.Stride * bmp.Height;
byte[] rgbValues = new byte[bytes];
// Copy the RGB values into the array.
//This causes read or write protected memory
System.Runtime.InteropServices.Marshal.Copy(ptr, rgbValues, 0, bytes);
Это не работает в режиме оптимизации и работает как exe не в IDE. Любые идеи Я пытался поставить это новый проект, и если я подключаюсь к процессу, когда нажимаю кнопку, и нажимаю эту кнопку несколько раз, то происходит ошибка, но в моем коде я звоню только один раз, так или иначе, не уверен, зачем эта ошибка.