Добрый день!
Есть проект, который переползает из Дельфы и 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, то ошибка просто вылезет на следующем рисовании.