Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Языки программирования > Oberon
Перезагрузить страницу GDI+ как выбирать параметры для работы
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
S.Yu.Gubanov S.Yu.Gubanov вне форума
Member
 
Сообщений: 587
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 03.12.2002
По умолчанию GDI+ как выбирать параметры для работы - 13.01.2005, 17:59

Вот интересно, кто-нибудь портировал графику GDI+ под BlackBox???

Я сегодня попробовал начать портировать - вроде задача не очень сложная, разьве только что очень занудная (например, портирование GDI+ в Delphi, как известно http://www.progdigy.com/headers/index.html , превратилось в пару файлов сумарным размером примерно в 15'000 строчек).

Вот код, написанный сегодня для пробы, он умеет рисовать прямую линию с помощью GDI+
Код:
MODULE GraphicsGDIPlusDll ["GdiPlus.dll"]; 

TYPE
    StartupInput* = RECORD [untagged]
     GdiplusVersion*, DebugEventCallback*, SuppressBackgroundThread*, SuppressExternalCodecs*: INTEGER
    END;
    
    StartupOutput* = RECORD [untagged]
     NotificationHook*, NotificationUnhook*: INTEGER
    END;    

    Status* = INTEGER;
    Object* = INTEGER;
    
PROCEDURE GdiplusStartup* (OUT token: INTEGER; VAR i: StartupInput; VAR o: StartupOutput): Status;
PROCEDURE GdiplusShutdown* (token: INTEGER);

PROCEDURE GdipAlloc* (size: INTEGER): INTEGER;
PROCEDURE GdipFree* (size: INTEGER);

(* Graphics *)
PROCEDURE GdipCreateFromHDC* (hdc: INTEGER; OUT graphics: Object): Status;
PROCEDURE GdipDeleteGraphics* (graphics: Object): Status;
PROCEDURE GdipGraphicsClear* (graphics: Object; color: INTEGER): Status;
PROCEDURE GdipDrawLineI* (graphics, pen: Object; x1,y1,x2,y2: INTEGER): Status;

(* Pen *)
PROCEDURE GdipCreatePen1* (color: INTEGER; width: SHORTREAL; unit: INTEGER; OUT pen: Object): Status;
PROCEDURE GdipDeletePen* (pen: Object): Status;

END GraphicsGDIPlusDll.
Код:
MODULE GraphicsGDIPlus; 

IMPORT Dll := GraphicsGDIPlusDll;

TYPE
    Status* = INTEGER;
    Color* = INTEGER;   (* 0AaRrGgBbH *)
    HDC* = INTEGER;
    Unit* = INTEGER;
    Object = INTEGER;
    
    Graphics* = POINTER TO LIMITED RECORD
  object: Object; status-: Status
    END;
    
    Pen* = POINTER TO LIMITED RECORD
  object: Object; status-: Status
    END;
  
VAR
    status-: Status;
    token: Object;

    (* Graphics *)    
    PROCEDURE (u: Graphics) FINALIZE- ();
    BEGIN u.status := Dll.GdipDeleteGraphics(u.object)
    END FINALIZE;
    
    PROCEDURE CreateGraphics* (hdc: HDC): Graphics;
  VAR u: Graphics;
    BEGIN NEW(u); u.status := Dll.GdipCreateFromHDC(hdc, u.object); RETURN u
    END CreateGraphics;
    
    PROCEDURE (u: Graphics) Clear* (color: Color), NEW;
    BEGIN u.status := Dll.GdipGraphicsClear(u.object, color)
    END Clear;
    
    PROCEDURE (u: Graphics) DrawLine* (pen: Pen; x1,y1,x2,y2: INTEGER), NEW;
    BEGIN u.status := Dll.GdipDrawLineI(u.object, pen.object, x1,y1,x2,y2)
    END DrawLine;
    
    (* Pen *)    
    PROCEDURE (u: Pen) FINALIZE- ();
    BEGIN u.status := Dll.GdipDeletePen(u.object)
    END FINALIZE;

    PROCEDURE CreatePen* (color: Color; width: SHORTREAL; unit: Unit): Pen;
  VAR u: Pen;
    BEGIN NEW(u); u.status := Dll.GdipCreatePen1(color, width, unit, u.object); RETURN u
    END CreatePen;


    (* Module *)
    PROCEDURE OnLoad();
  VAR i: Dll.StartupInput; o: Dll.StartupOutput;
    BEGIN
  i.GdiplusVersion := 1; i.DebugEventCallback := 0; 
  i.SuppressBackgroundThread := 0; i.SuppressExternalCodecs := 0;
  o.NotificationHook := 0; o.NotificationUnhook := 0;
  status := Dll.GdiplusStartup(token, i, o)
    END OnLoad;

    PROCEDURE OnUnload();
    BEGIN Dll.GdiplusShutdown(token)
    END OnUnload;

    BEGIN OnLoad() CLOSE OnUnload()
    
END GraphicsGDIPlus.
Код:
MODULE GraphicsTest1; 

IMPORT GP := GraphicsGDIPlus, Log := StdLog, Views, HostPorts;

    TYPE
  View = POINTER TO RECORD (Views.View) END;

    PROCEDURE (v: View) Restore (f: Views.Frame; l, t, r, b: INTEGER);
  VAR g: GP.Graphics; pen: GP.Pen;
    BEGIN
  g := GP.CreateGraphics( f.rider(HostPorts.Rider).port.dc );
  g.Clear(0FFAA9900H);
  pen := GP.CreatePen(0FFBBBB00H, 5.0, 0);
  g.DrawLine(pen, 10, 10, 200, 100);
    END Restore;
    
    PROCEDURE Test1*();
  VAR v: View;
    BEGIN 
  NEW(v); Views.OpenView(v)
    END Test1;

END GraphicsTest1.
Ответить с цитированием
  (#2 (permalink)) Старый
DeepFinder DeepFinder вне форума
Member
 
Сообщений: 186
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 14.06.2004
По умолчанию 20.02.2005, 02:35

Ннеа Есть идея портировать свою
С программированием под масдай знаком мало. Извините за невежество, а что такое GDI+ ? Если немного подумать, то можно предположить, что GDI+ -это Интерфейс Разработки Графики + .

15'000 строчек :!: Хм... Самый крутой известный мне 3D движок написанный на Паскале - Inertia занимает 3363 строки кода на Паскале и 6993 кода на асме даже в неравноценной сумме с асмом - 10356 строк

И что же он позволяет делать? Если графику в окне то енто не очень интересно А вот если позволяет полностью захватить видеорежим тогда намного лучше. Например, какая-нибудь стратегия или екшн - в окне... да ещё с масдайными диалогами и кнопками... Тху!

У меня есть наработанный на Паскале код для плоской и 3D графики. Ынтересно бы приспособить его к ЧЯ. И всё что мне нужно так это LFB + несколько прерываний + ассемблер.

Мда, ваш код отлично скомпилился, однако ЧЯ не смог найти GdiPlus.dll Я, кстати, тоже Так что посмотреть результат не удалось. А прямая линия то в смысле горизонтальная или вообще прямая? И как эффективно она рисуется (в смысле быстро)? И да, используется ли отсечение по прямоугольной области (по границе окна)?

А вообще Оберон заинтересовал, особенно упрощённым синтаксисом, однако к ОО синтаксису, блин, нужно ещё привыкнуть.

Вы были правы на Мыслях Вслух: С++ немодульный, вывернутый наизнанку, крайне нечитаемый язык, к тому же отвергнутый военными и серьёзными фирмами. А жаба от С++ далеко не уйдёт, - буржуи не дадут .
Остаётся новый, продвинутый Паскаль .
Ответить с цитированием
  (#3 (permalink)) Старый
DeepFinder DeepFinder вне форума
Member
 
Сообщений: 186
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 14.06.2004
По умолчанию 20.02.2005, 02:35

Ннеа Есть идея портировать свою
С программированием под масдай знаком мало. Извините за невежество, а что такое GDI+ ? Если немного подумать, то можно предположить, что GDI+ -это Интерфейс Разработки Графики + .

15'000 строчек :!: Хм... Самый крутой известный мне 3D движок написанный на Паскале - Inertia занимает 3363 строки кода на Паскале и 6993 кода на асме даже в неравноценной сумме с асмом - 10356 строк

И что же он позволяет делать? Если графику в окне то енто не очень интересно А вот если позволяет полностью захватить видеорежим тогда намного лучше. Например, какая-нибудь стратегия или екшн - в окне... да ещё с масдайными диалогами и кнопками... Тху!

У меня есть наработанный на Паскале код для плоской и 3D графики. Ынтересно бы приспособить его к ЧЯ. И всё что мне нужно так это LFB + несколько прерываний + ассемблер.

Мда, ваш код отлично скомпилился, однако ЧЯ не смог найти GdiPlus.dll Я, кстати, тоже Так что посмотреть результат не удалось. А прямая линия то в смысле горизонтальная или вообще прямая? И как эффективно она рисуется (в смысле быстро)? И да, используется ли отсечение по прямоугольной области (по границе окна)?

А вообще Оберон заинтересовал, особенно упрощённым синтаксисом, однако к ОО синтаксису, блин, нужно ещё привыкнуть.

Вы были правы на Мыслях Вслух: С++ немодульный, вывернутый наизнанку, крайне нечитаемый язык, к тому же отвергнутый военными и серьёзными фирмами. А жаба от С++ далеко не уйдёт, - буржуи не дадут .
Остаётся новый, продвинутый Паскаль .
Ответить с цитированием
  (#4 (permalink)) Старый
S.Yu.Gubanov S.Yu.Gubanov вне форума
Member
 
Сообщений: 587
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 03.12.2002
По умолчанию 21.02.2005, 11:05

Цитата:
Originally posted by DeepFinder
[b]...а что такое GDI+ ?
Новый "стандарт" графики под Windows XP. Реализована в библиотеке gdiplus.dll - входящей в состав Windows XP. Передыдущие версии Windows использовали gdi32.dll.
Цитата:
Originally posted by DeepFinder+-->
Цитата:
...Мда, ваш код отлично скомпилился, однако ЧЯ не смог найти GdiPlus.dll
Наверное Вы работаете не под Windows XP. В таком случае Вам надо скачать gdiplus.dll с сайта Микрософта.
Цитата:
Originally posted by DeepFinder@
[b]...И что же он позволяет делать?
Да ничего особенного, просто вся Windows XP, такая красивая благодаря тому что нарисована GDI+. Цвет изначально имеет альфа канал - прозрачность. То есть можно рисовать все полупрозрачным.
<!--QuoteBegin-DeepFinder

[b]...И как эффективно она рисуется (в смысле быстро)?
Ой, даже и не спрашивайте. Известно, что GDI+ работает медленнее обычного виндозного GDI32. В частности как раз прямые линии обычный GDI32 рисует быстрее. Фишка GDI+ в том что он может нарисовать полупрозрачные линии (прямые, безье, сплайны), градиентную полупрозрачную заливку произвольной области, работать с графическими файлами всяких разных форматов: bmp, jpg, gif, tif, png.

Статьи про GDI+
http://www.rsdn.ru/article/gdi/gdiplus1.xml
http://www.rsdn.ru/article/gdi/gdiplus2.xml
http://www.rsdn.ru/article/gdi/gdiplus3.xml
Ответить с цитированием
  (#5 (permalink)) Старый
S.Yu.Gubanov S.Yu.Gubanov вне форума
Member
 
Сообщений: 587
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 03.12.2002
По умолчанию 21.02.2005, 11:05

Цитата:
Originally posted by DeepFinder
[b]...а что такое GDI+ ?
Новый "стандарт" графики под Windows XP. Реализована в библиотеке gdiplus.dll - входящей в состав Windows XP. Передыдущие версии Windows использовали gdi32.dll.
Цитата:
Originally posted by DeepFinder+-->
Цитата:
...Мда, ваш код отлично скомпилился, однако ЧЯ не смог найти GdiPlus.dll
Наверное Вы работаете не под Windows XP. В таком случае Вам надо скачать gdiplus.dll с сайта Микрософта.
Цитата:
Originally posted by DeepFinder@
[b]...И что же он позволяет делать?
Да ничего особенного, просто вся Windows XP, такая красивая благодаря тому что нарисована GDI+. Цвет изначально имеет альфа канал - прозрачность. То есть можно рисовать все полупрозрачным.
<!--QuoteBegin-DeepFinder

[b]...И как эффективно она рисуется (в смысле быстро)?
Ой, даже и не спрашивайте. Известно, что GDI+ работает медленнее обычного виндозного GDI32. В частности как раз прямые линии обычный GDI32 рисует быстрее. Фишка GDI+ в том что он может нарисовать полупрозрачные линии (прямые, безье, сплайны), градиентную полупрозрачную заливку произвольной области, работать с графическими файлами всяких разных форматов: bmp, jpg, gif, tif, png.

Статьи про GDI+
http://www.rsdn.ru/article/gdi/gdiplus1.xml
http://www.rsdn.ru/article/gdi/gdiplus2.xml
http://www.rsdn.ru/article/gdi/gdiplus3.xml
Ответить с цитированием
Ads.
  (#6 (permalink)) Старый
Dimych Dimych вне форума
Новичок
 
Сообщений: 4
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 20.10.2005
По умолчанию Re: GDI+ - 20.10.2005, 19:02

Цитата:
Originally posted by S.Yu.Gubanov
[b]Вот интересно, кто-нибудь портировал графику GDI+ под BlackBox???
Меня не устраивает скорость работы самого движка GDI+.
Гораздо более интересным является движок OpenGL.
Вот его кто-нибудь пробовал портировать под BlackBox?
(или ткните носом в документацию, если он там уже имеется )
Ответить с цитированием
  (#7 (permalink)) Старый
info21 info21 вне форума
Новичок
 
Сообщений: 7
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 24.01.2005
По умолчанию Re: GDI+ - 20.10.2005, 21:49

Цитата:
Originally posted by Dimych
[b]Гораздо более интересным является движок OpenGL.
Вот его кто-нибудь пробовал портировать под BlackBox?
(или ткните носом в документацию, если он там уже имеется )
Подсистема Ogl На www.zinnamturm.de, с 1999 г.

Включена в университетский пакет с Информатики-21.
Ответить с цитированием
  (#8 (permalink)) Старый
irnis
Guest
 
Сообщений: n/a
По умолчанию Re: GDI+ - 11.12.2005, 21:02

Цитата:
Originally posted by Dimych+-->
Цитата:
<!--QuoteBegin-S.Yu.Gubanov
Цитата:
[b]Вот интересно, кто-нибудь портировал графику GDI+ под BlackBox???
Меня не устраивает скорость работы самого движка GDI+.
Гораздо более интересным является движок OpenGL.
Все же OpenGL и GDI+ немного разные вещи. GDI+ - это качественная и точная 2D графика. Ближе к нему - http://www.cairographics.org/ и http://www.antigrain.com/
Ответить с цитированием
  (#9 (permalink)) Старый
Trurl Trurl вне форума
Member
 
Сообщений: 108
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 26.08.2004
По умолчанию Re: GDI+ - 16.12.2005, 16:40

Цитата:
Originally posted by Dimych
[b]Гораздо более интересным является движок OpenGL.
Вот его кто-нибудь пробовал портировать под BlackBox?
(или ткните носом в документацию, если он там уже имеется )
WinGL, WinGLAux, WinGLUtil
Ответить с цитированием
Ads
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как выбирать БП. Друг № 1 Блоки питания 24 13.10.2011 00:16
Как выбирать видеокарту gimpy Видеокарты 3 15.04.2011 11:04
Как выбирать необъявленные переменные R0bert Visual Basic 1 03.03.2011 19:34
По каким параметрам выбирать оперативную память. vike birdbrain Любые вопросы от новичков 11 19.02.2011 14:11
По каким параметрам выбирать видеокарту? batijok Видеокарты 1 27.01.2010 16:46
По каким характеристикам выбирать наушники? Василисий Любые вопросы от новичков 11 26.02.2009 22:33
AVRstudio и gcc где его выбирать SafSerg Микроконтроллеры 1 16.02.2009 13:46
Можно ли заставить CFileDialog выбирать папки Odin_KG Visual C++ 1 16.05.2008 22:37
SELECT как выбирать данные ComatoZZZ MSSQL Server 2 06.12.2007 06:43
Создать приложение позволяющие выбирать из компонента Radiogroup1 Leliks Delphi 5 12.11.2007 14:34
Нужен компонет позволяющий выбирать несколько дисков Masturbyte Visual C++ 1 01.08.2004 14:07



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов