Bitmap - Incompatible DataSize

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Ответить
Аватара пользователя
neitent
незнакомец
Сообщения: 3
Зарегистрирован: 24.11.2015 17:38:27

Bitmap - Incompatible DataSize

Сообщение neitent »

Добрый день!
Есть проект, который переползает из Дельфы и Windows на Лазарус (1.4.4, fpc 2.6.4) и Linux (Mint, xfce, x64), компилирую с выключенной оптимизацией (впрочем, это тоже не роляет().
Один из методов класса получает через var BM: TBitMap

Далее:

FreeAndNIl (BM);
BM := TBitMap.Create;
...
BM.SetSize (Width,Height);
bm.canvas.Brush.Color := BackCol;
bm.canvas FillRect(R);
...

И тут происходит неожиданное. Картинка очень длинная и очень узкая, 57 в высоту и десятки тысяч в длину. И вот она у меня падает
в gtk2clintf на createbitmap.
RaiseGDBException('TGtk2WidgetSet.CreateBitmapFromRawImage Incompatible DataSize');
Винила в этом портированность из Дельфы (ненативные битмапы, мало ли), какие-то скрытые особенности передачи var параметров - но на пустом проекте происходит абсолютно такая же фигня!
BM.rawimage.description.Init_BPP24_B8G8R8_M1_BIO_TTB (который работает с несовместимым BitsPerPixel - но у меня-то эта проверка пройдена, ошибка в следующей) вроде бы помог сначала поднять планку "падения" до 52К с хвостом, но теперь с переработанным алгоритмом отрисовки мелкопрямоугольников оно стало падать на 16К.
Если убрать именно этот FillRect, то ошибка просто вылезет на следующем рисовании.
sts
энтузиаст
Сообщения: 548
Зарегистрирован: 04.04.2008 12:15:44
Откуда: Тольятти

Сообщение sts »

а разве у bitmapa нету ограничения на размер? смутно припоминаю- есть, в винде по крайней мере (в зависимости от контекста устройства), както я ресайзил картинки - сканы документов а там размер ~7тыс пикселей, а некоторые алгоритмы сглаживания требовали увеличить картинку сначала, так возникала подобная ошибка.

Добавлено спустя 4 минуты 12 секунд:
хотя в линухе может чтото другое
Аватара пользователя
neitent
незнакомец
Сообщения: 3
Зарегистрирован: 24.11.2015 17:38:27

Сообщение neitent »

Код: Выделить всё

а разве у bitmapa нету ограничения на размер? 

под дельфой они были завязаны исключительно на свободную память( Линукс сам по себе на большие файлы не ругается - это я тоже проверила =\

И тут я поняла, кого надо винить TGdkImage.bpl : guint16; { bytes per line }
Guint16: Values of this type can range from 0 to G_MAXUINT16 (= 65,535).
Кажется, придется рисовать и поворачивать потом. Ну, если не найдется нормального решения. Окей. :|
Ответить