"Неверный дескриптор" Создать 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.

Другие вопросы по тегам