Параметры отображения чистой графики в Delphi 2009 - PullRequest
2 голосов
/ 17 ноября 2010

Весь мой опыт непосредственного использования графики состоит в том, чтобы рисовать фигуры с помощью gdi-модуля Turbo Pascal на машине 386 лет назад, находить его невыносимо медленным и никогда не задумываться над ним.Другими словами, я понятия не имею, с чего начать.

Для простого приложения для интернет-радиоплеера я хотел бы создать графический дисплей, немного похожий на Winamp (но немного больше и проще для глаз, поскольку неразборчивость таких дисплеев - одна из причин, по которой я пытаюсь сделать это самостоятельно).

Простых графических компонентов, подобных имитирующим светодиодные дисплеи, конечно, далеко не достаточно.Я не ожидаю рисовать интерактивные элементы управления пользовательского интерфейса, и, конечно, не скины - только показания, с текстом, цифрами и несколькими символами.Я понимаю, что Delphi 2010 поддерживает Direct2D, но у меня есть только D2009.

Какие у меня варианты?Есть ли сторонние компоненты, которые могли бы помочь?

При редактировании две маленькие точки.Мне нужно, чтобы рисунок был без мерцания (то есть, в отличие от того, что я испытал много лет назад в Turbo Pascal :-).Будет ли TCanvas достаточно быстрым для этого?Кроме того, я бы, вероятно, хотел бы использовать alphablending, который я не думаю, что я могу получить с помощью базового графического API TextOut, LineTo и т. Д.(Я просто не знаю, что это возможно).А как насчет GDI +?

Ответы [ 4 ]

3 голосов
/ 18 ноября 2010

Библиотека для быстрой 2D-графики для Delphi доступна в виде исходного кода на Sourceforge:

Graphics32 (домашняя страница: http://www.graphics32.org/)

Graphics32 isграфическая библиотека для Delphi и Kylix / CLX. Оптимизирована для 32-битных пиксельных форматов, обеспечивает быстрые операции с пикселями и графическими примитивами. В большинстве случаев Graphics32 значительно превосходит стандартные методы TBitmap / TCanvas.

Особенности Некоторые функции Graphics32 включают:

  • Быстрый доступ к пикселю в 100 раз быстрее по сравнению со стандартным TBitmap;
  • Высокопроизводительное растровое альфа-смешение (включая альфа-смешение на пиксель));
  • Сглаживание пикселей, линий и полигонов с субпиксельной точностью (в сочетании с альфа-смешиванием);
  • Произвольные преобразования полигонов и пользовательские заливки;
  • Повторная выборка растровых изображений с высоким качествомфильтры реконструкции (например, Lanczos, Cubic, Mitchell);
  • Уникальная современная система растеризации;
  • Аффинные преобразования растровых изображений: повороты, масштабирование и т. Д. С точностью до субпикселя;
  • Произвольные проективные преобразования растровых изображений;
  • Произвольные преобразования преобразования растровых изображений (например, для деформации, морфинга);
  • Гибкая реализация суперсэмплинга для максимального качества выборки;
  • Компоненты для отображения изображений без мерцания с оптимизированной двойной буферизацией с помощью усовершенствованного оптимизатора перерисовки на основе MicroTiles;
  • Несколько настраиваемых, простых в использованииоверлейные слои;
  • Блокировка растровых изображений для безопасной многопоточности;
  • Редактор свойств для загрузки RGB и альфа-каналов;
  • Загрузка во время разработки форматов изображений, поддерживаемых стандартным TPicture;
  • Работает на Borland Delphi, C ++ Builder и Kylix (последняя версия, которая поддерживала Kylix, была 1.8.3).

Начиная с версии 1.5.1b Graphics32 лицензируется в соответствии с условиями публичной лицензии Mozilla.

1 голос
/ 17 ноября 2010

Взгляните на TCanvas .Он встроен в большинство визуальных элементов управления и содержит простые методы для простого рисования, которое вам не нужно, без необходимости работать с DirectX или OpenGL.Если вам нужна действительно простая поверхность, на которой можно рисовать, поместите на форму пустой TImage TPaintBox и используйте его Canvas в качестве поверхности для рисования.

0 голосов
/ 18 ноября 2010

Только что увидел ваше редактирование. Если вам нужно альфа-смешение и рисование без мерцания, TCanvas, вероятно, не будет достаточно для вас. Вы должны взглянуть на компоненты, которые обертывают OpenGL или Direct3D и предоставляют вам мощный графический холст.

Одним из таких пакетов является Asphyre , хотя я не уверен, есть ли у них версия, которая работает на Delphi 2009+. У меня также есть специальная библиотека, которая упаковывает SDL 1.3 и дает вам компонент рамки рисования, который вы можете поместить в форму Delphi. Он работает на Delphi 2009 и более поздних версиях, но я еще не выпустил его как его собственный пакет. Вы можете найти его, если покопаетесь в архиве SVN моего игрового движка, но если вы можете подождать день или два, я мог бы попытаться превратить его в простой в использовании пакет компонентов BPL и сделать его доступным для загрузки.

0 голосов
/ 18 ноября 2010

В основном я согласен с Мейсоном и комментариями.TPaintBox действительно очень простой компонент.Вы реализуете событие OnPaint и находитесь в полном контроле.Это достаточно быстро на достаточно быстром компьютере.

Поместите его в TScrollBox, и вам даже не нужно беспокоиться о том, куда пользователь прокрутил:)

Убедитесь, что вы проверилисвойство DoubleBufferred родительского элемента управления (панель / ScrollBox).

Если это сложный рисунок / графика, также проверьте InvalidateRect - это определяет, какая область холста перерисовывается.

Конечно, как и вся графика / рисунок, она довольно быстро усложняется.(

...