Консольное приложение и TBitmap

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

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

Консольное приложение и TBitmap

Сообщение alu » 01.11.2007 20:34:38

Lazarus 0.9.20
ASPLinux 11.2

почему-то не работает корректно создание битмапов в консольных приложениях
Код: Выделить всё
program project1;

{$mode objfpc}{$H+}

uses
  {$IFDEF UNIX}{$IFDEF UseCThreads}
  cthreads,
  {$ENDIF}{$ENDIF}
  Classes,Graphics
  { add your units here };
var
w:tbitmap;

begin
w:=tbitmap.Create;
w.Canvas.Color:=0;//здесь программа вылетает, не может вызвать CreateBitmap
w.Free;
end.

в чем дело? и как это обойти?
Задача в косоле по входным параметрам нарисовать изображение и сохранить в файл.
Аватара пользователя
alu
новенький
 
Сообщения: 33
Зарегистрирован: 15.01.2007 12:54:14
Откуда: Саратов

Сообщение Sergei I. Gorelkin » 01.11.2007 21:56:19

CreateBitmap - функция widgetset-a, который подключается с помощью модуля Interfaces. А если его подключить, то программа уже не будет консольной, будет требовать всякие там gtk и т.д.

Альтернатива - использовать пакет fpImage, для поставленной задачи его должно хватить.
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
 
Сообщения: 1405
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

Сообщение shade » 01.11.2007 22:06:12

Sergei I. Gorelkin писал(а):CreateBitmap - функция widgetset-a, который подключается с помощью модуля Interfaces. А если его подключить, то программа уже не будет консольной, будет требовать всякие там gtk и т.д.

От того, что требуется gtk и т.п. программа не становиться оконной...
Аватара пользователя
shade
энтузиаст
 
Сообщения: 879
Зарегистрирован: 21.02.2006 20:15:48
Откуда: http://shamangrad.net/

Сообщение Attid » 02.11.2007 12:47:53

От того, что требуется gtk и т.п. программа не становиться оконной..


но не будет через ssh к примеру работать, или без иксов.
Аватара пользователя
Attid
долгожитель
 
Сообщения: 2585
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E

Сообщение alu » 02.11.2007 16:05:01

Sergei I. Gorelkin писал(а):CreateBitmap - функция widgetset-a, который подключается с помощью модуля Interfaces. А если его подключить, то программа уже не будет консольной, будет требовать всякие там gtk и т.д.

Альтернатива - использовать пакет fpImage, для поставленной задачи его должно хватить.
Спасибо за подсказку.
Аватара пользователя
alu
новенький
 
Сообщения: 33
Зарегистрирован: 15.01.2007 12:54:14
Откуда: Саратов

Сообщение alu » 03.11.2007 15:11:34

а метод Polygon может рисовать заполненные многоугольники?

Код: Выделить всё
var
BitmapCanvas: TFPImageCanvas;
.....
TempImage.BitmapCanvas.Polygon(points_arr);

FloodFill не корректно отрабатывает и долго слишком

или хотбы метод который может рисовать заполненные треугольники
Аватара пользователя
alu
новенький
 
Сообщения: 33
Зарегистрирован: 15.01.2007 12:54:14
Откуда: Саратов

Сообщение alu » 03.11.2007 19:14:53

что-то про заполненные многоугольники ничего в описании этого модуля не нашел.
Кто-нибуть рисовал их с помошью FPImage или нет, вопрос принципиальный.
Или там все это нужно делать ручками????
Уравнени прямых и тд..???

если так, то хотбы скажите как получить доступ к области памти где хранится по-пиксельно изображение, или к ScanLines. Писал подобную вешь, но нужен прямой доступ к памяти изображения...
Аватара пользователя
alu
новенький
 
Сообщения: 33
Зарегистрирован: 15.01.2007 12:54:14
Откуда: Саратов

Сообщение Sergei I. Gorelkin » 04.11.2007 01:15:17

Посмотрел в исходники... Теперь я вообще жалею, что его посоветовал :(
Прямого доступа к памяти там картинки там нет в принципе, только через Pixels[x,y].
Рисования закрашенных полигонов тоже нет, стоит TODO...
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
 
Сообщения: 1405
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

Сообщение alu » 04.11.2007 06:10:32

И всеже вернусь к первому посту. а возможно ли вообще создать TBitmap в консольном приложении.
и чтобы это приложение запускалось на runlevel 3 без загруженных X

И может еще есть какие графические библиотека для 2-х мерной графики у FreePascal
Аватара пользователя
alu
новенький
 
Сообщения: 33
Зарегистрирован: 15.01.2007 12:54:14
Откуда: Саратов

Сообщение alu » 04.11.2007 08:43:12

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

const
  maxLongint  = $7fffffff;
...
    const
       MaxInt  = MaxLongint;
.....

  TFPIntegerArray = array [0..(maxint-1) div sizeof(integer)-1] of integer;
  PFPIntegerArray = ^TFPIntegerArray;
...
  TFPMemoryImage = class (TFPCustomImage)
    private
      FData : PFPIntegerArray;
.....

как получить доступ к FData
просто перенесение его в исходниках в public выдает ошибку
identfier idents no member "FData"
при попытке доступа к нему
Аватара пользователя
alu
новенький
 
Сообщения: 33
Зарегистрирован: 15.01.2007 12:54:14
Откуда: Саратов

Сообщение shade » 04.11.2007 11:44:37

alu писал(а):И может еще есть какие графические библиотека для 2-х мерной графики у FreePascal

Попробуй подключить Widgetset, да будет зависимость от X и от Widgetset'а, но от этого программа по идее не перестанет быть консольной...
Аватара пользователя
shade
энтузиаст
 
Сообщения: 879
Зарегистрирован: 21.02.2006 20:15:48
Откуда: http://shamangrad.net/

Сообщение Attid » 04.11.2007 11:50:20

станет, она не будет запускаться из голой консоли, только из иксовой.
Аватара пользователя
Attid
долгожитель
 
Сообщения: 2585
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E

Сообщение alu » 04.11.2007 12:57:29

запускатьс она будет из голой консоли (из php exec()) и соответстсенно нужна работа без Х-сов
-------
А почему во врем отладки немогу спуститься на уровень исходников этих модулей, отладчик просто не входит в методы TFPImage мне нужно сравнить занчени полей Fdata и мое, которое я получил из этого объекта
(у мен возникает ощущение что он делает что-то не то что написанно в исходниках, это случайно не закрытый проект????)

в TFPMemoryImage это указатель
ширина и высота хранится по смещению в этом указателе 5*4 байта и 6*4 байта соответсвенно
FDATA по смещению 7*4 байта - и по иерархии объектов и по бампу памти, который я смотрел
т.е. доступ получить можно

НО.... беру это значение и заполняю по его адресу нулями первые 100 integer (картинка 450х450), после этого перестает срабатывать сохранение в PNG файл этого образа. Все остальные методы рисования нормально отрабатывают, без ошибок... (могу выложить сюда исходник на котором эксперементирую, если это нужно)

может какую-нибуть таблицу виртуальных методов повреждаю?
как может модуль узать что я изменил изображение не его средствами в runtime и зачем ему это узнавать... (опять же всплывает подозрени закрытости модуля)

полученный адрес где-то такой
$a10080 - странный немного
все адреса выделемые динамически получают адреса как посмотрел
$9xxxxx

Народ, подскажите, ООЧЕНЬ надо!!!!
Аватара пользователя
alu
новенький
 
Сообщения: 33
Зарегистрирован: 15.01.2007 12:54:14
Откуда: Саратов

Сообщение Sergei I. Gorelkin » 04.11.2007 14:00:33

Модуль этот открыт, как и все, что идет с FPC.

Но, в релизных сборках файлы .ppu "отвязаны" от исходников, чтобы при случайном их изменении компилятор не кидался пересобирать все пакеты. Или же на машине, где все собирали, исходники лежали в другом месте относительно .ppu. Отсюда и описанные глюки - он просто не замечает переноса FData в public и т.д.

Как правильнее поступить, даже не знаю - то ли прибить "лишние" .ppu, то ли скопировать пакет в папку проекта, то ли собирать его отдельно с помощью "make; make install"...
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
 
Сообщения: 1405
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

Сообщение alu » 04.11.2007 14:11:30

как заметил еще вызов метода Pixels у TFPImage приводит к такой же ошибке при сохранении файла... это что значит сам объект не может работать со своими полми корректно??? через TFPCanvas->Colors все проходит нормально...
формат там специфичный чтоли какой? по объвлениям это не видно..
фигня какая-то...
Аватара пользователя
alu
новенький
 
Сообщения: 33
Зарегистрирован: 15.01.2007 12:54:14
Откуда: Саратов

След.

Вернуться в Lazarus

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

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

Рейтинг@Mail.ru