Конференция "Media" » Использование Agg2D (AggPas) [D7]
 
  • JohnJ (06.10.11 14:46) [0]
    Здравствуйте, уважаемые мастера! У меня очень странная, на мой неопытный взгляд, ситуация. Надеюсь, поможете мне разобраться. Win7, D7.

    Есть такая графическая библиотека Agg2D. К ней идёт документация http://www.crossgl.com/aggpas/documentation/index.html и пример tagg2d_example02.zip
    Этот пример в изначальном варианте отлично работает у меня. Вкратце содержание примера таково:
    1. В FormCreate создаётся объект класса TAgg2D
    2. В FormResize пристыковываем созданный объект к bitmap-у изображения, кинутого на форму, и если всё нормально, рисуем звёздочку:

    procedure TForm1.FormResize(Sender: TObject);
    begin
     Image1.Picture.Bitmap.Width :=ClientWidth;
     Image1.Picture.Bitmap.Height:=ClientHeight;

     if VG.Attach(Image1.Picture.Bitmap ) then
     begin
      VG.ClearAll(255 ,255 ,255 );
      VG.LineWidth(10 );
      VG.LineColor($32 ,$cd ,$32 );
      VG.FillColor($ff ,$d7 ,$00 );

      VG.Star(100 ,100 ,30 ,70 ,55 ,5 );
     end;
    end;



    Теперь в чём проблема: рисование происходит только в одной функции, а при рисовании из других - игнорируется. Я не понимаю, почему такое возможно и отчего зависит.

    Чтобы было понятнее, о чём я веду речь, приведу серию примеров:
    Я добавляю на форму кнопку, и в  обработчике нажатия пытаюсь дорисовать что-то: нет никакой реакции. Я пробовал и без Attach (так как он уже был произведён), так и с ним.


    procedure TForm1.Button1Click(Sender: TObject);
    begin
    if VG.Attach(Image1.Picture.Bitmap ) then
     begin
      VG.Ellipse(120, 120, 20, 20);
     end;
    end;



    Я тут подумал, что возможно он единожды рисует, а потом "забывается". Тогда я вписал в FormResize такие координаты:

    VG.Star(Width div 2 ,100 ,30 ,70 ,55 ,5 );



    Форму растянул - звёздочка переместилась. Значит перерисовывается...

    Может по каким-то причинам рисует только из FormResize (хотя судя по документации это не так): убрал вообще FormResize, нажимаю на кнопку - рисуется мой эллипс! Вернул FormResize и приписал ещё одну строку:

    VG.Star(Width div 2 ,100 ,30 ,70 ,55 ,5 );
    VG.Ellipse(120, 120, 20, 20);



    Эллипс рисуется поверх звёздочки..

    Почему же он не рисуется, когда что-то уже нарисовано, при нажатии на кнопку?
  • MBo © (06.10.11 14:51) [1]
    Image1.Refresh не поможет?
  • JohnJ (06.10.11 14:52) [2]
    похоже что помог, спасибо :)
  • JohnJ (06.10.11 17:17) [3]
    ещё одна проблема образовалась: Agg2D не рисует на прозрачном фоне... Если сделать ClearAll(0, 0, 0, 0), то область закрасится прозрачным и на ней ничего не нарисуется. Если же сделать (0, 0, 0, 1) - будет сплошной чёрный фон и на нём появляются элементы...

    Что можно придумать?
  • Омлет © (06.10.11 18:28) [4]
    ClearAll(0, 0, 0, 255)
  • Jeer © (06.10.11 18:29) [5]
    Логически поразмышлять над "проблемой" яркость-прозрачность.
  • Омлет © (06.10.11 18:31) [6]
    Там еще есть BlendMode, может его надо выставить.
  • aaleksander (22.03.12 13:34) [7]
    А никто не сталкивался с проблемой рисования русских букв в AggPas?
    Всю библиотеку уже перерыл, не могу понять, где он charset теряет.
 
Конференция "Media" » Использование Agg2D (AggPas) [D7]
Есть новые Нет новых   [118798   +30][b:0][p:0.001]