"Неверный дескриптор" Создать CGBitmapContext
У меня проблема с CGBitmapcontext. Я получаю ошибку при создании CGBitmapContext с сообщением "недопустимый дескриптор".
Вот мой код:
var previewContext = new CGBitmapContext(null, (int)ExportedImage.Size.Width, (int)ExportedImage.Size.Height, 8, (int)ExportedImage.Size.Height * 4, CGColorSpace.CreateDeviceRGB(), CGImageAlphaInfo.PremultipliedFirst);
Спасибо;
2 ответа
Решение
Это потому, что вы передаете нуль в первый параметр. CGBitmapContext предназначен для рисования непосредственно в буфер памяти. Первый параметр во всех перегрузках конструктора (Apple docs):
data Указатель на место назначения в памяти, где должен отображаться чертеж. Размер этого блока памяти должен быть не менее (bytesPerRow * height) байтов.
В MonoTouch мы получаем две перегрузки, которые принимают байт [] для удобства. Поэтому вы должны использовать это так:
int bytesPerRow = (int)ExportedImage.Size.Width * 4; // note that bytes per row should
//be based on width, not height.
byte[] ctxBuffer = new byte[bytesPerRow * (int)ExportedImage.Size.Height];
var previewContext =
new CGBitmapContext(ctxBuffer, (int)ExportedImage.Size.Width,
(int)ExportedImage.Size.Height, 8, bytesPerRow, colorSpace, bitmapFlags);
Это также может произойти, если width
или же height
параметры, передаваемые в метод, имеют значение 0.