2016-07-09 7 views
-1

У меня есть программа на C#, вызывающая существующую библиотеку библиотеки изображений C с использованием P/Invoke.Max Buffer Размер при вызове Родные методы

Возможно ли, что существует ограничение по размеру буферов, чем может быть эффективно распределено?

Я вызываю функцию, где я передать указатель на InputBuffer, его размер и OUTPUTBUFFER, как это:

cmsDoTransform(xform, inputBitmapBytesRGB, outputBitmapBytesCMYK, TotalPixels); 

Экспериментируя с этим кодом, я продолжал получать ошибки MemoryAccessViolation?

Итак, я начал работать с очень маленькими изображениями RGB размером от 1x1 пикселей, 2x2, 4x4, 8x8, 16x16 до 64x64, и все сработало, внезапно, больше никаких сообщений об ошибках. Не может быть счастливее.

Уверенный, я вернулся к своему оригинальному образцу RGB с разрешением 364x288 пикселей. Это не сработало? Вернуться к MemoryAccessViolations?

Таким образом, я уменьшил размер изображения с 364x288 до 288x288 до 256x256, пока он не «прошел», на 128x128, в результате получится размер изображения 49,512 байт.

Таким образом, параметр TotalPixels в приведенном выше вызове функции стал 128x128 или 16,384. Кажется, что о «максимальном» номере, который .NET-маршаллер принимает в качестве размера буфера? Имеет ли это смысл?

Есть ли верхний предел в .NET, который я не могу сделать выше в скромных видах обработки изображений, которые я делаю?

+0

Убедитесь, что индекс для байта [] является улоном, а не целым числом. – jdweng

ответ

-1

яйцо на моем лице ...

Оказывается, я устанавливал размер буфера неправильно.

Я использую этот код:

Byte[] Input = new byte[1024]; 
Byte[] Output = new byte[1024]; 
UInt32 pixels = 1024;  
cmsDoTransform(xform, Input, Output, pixels); 

Когда я использую этот код:

Byte[] Input = new byte[1024 x 3]; // To allow for RGB = 3 bytes/pixel 
Byte[] Output = new byte[1024 x 4]; // To allow for CMYK = 4 bytes/pixel 
UInt32 pixels = 1024; // Correct number of pixels 
cmsDoTransform(xform, Input, Output, pixels); 

я полностью пропустил это жизненно важное различие и неиспользуемый дни ищу свою ошибку. Я посоветовал разработчику рассмотреть возможность добавления фрагмента кода в документации на будущее ...