Bitmap - Incompatible DataSize

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

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

Bitmap - Incompatible DataSize

Сообщение neitent » 24.11.2015 18:56:21

Добрый день!
Есть проект, который переползает из Дельфы и 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, то ошибка просто вылезет на следующем рисовании.
Аватара пользователя
neitent
незнакомец
 
Сообщения: 3
Зарегистрирован: 24.11.2015 18:38:27

Re: Bitmap - Incompatible DataSize

Сообщение sts » 25.11.2015 09:27:21

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

Добавлено спустя 4 минуты 12 секунд:
хотя в линухе может чтото другое
sts
постоялец
 
Сообщения: 455
Зарегистрирован: 04.04.2008 12:15:44
Откуда: Тольятти

Re: Bitmap - Incompatible DataSize

Сообщение neitent » 25.11.2015 12:02:10

Код: Выделить всё
а разве у bitmapa нету ограничения на размер?

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

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


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot] и гости: 235

Рейтинг@Mail.ru