Кіріспе
Microsoft Windows API
Графикалық құрылғы интерфейсі (GDI) — Microsoft Windows жүйесінің графикалық объектілерді бейнелеуге және оларды мониторлар мен принтерлер сияқты шығыс құрылғыларына жіберуге жауапты, көне компоненті. Ол DirectDraw API және кейін Direct2D API-мен алмастырылды. Windows қолданбалары GDI-мен өзара әрекеттесу үшін Windows API-ді пайдаланады, мысалы, сызықтар мен қисықтар салу, қаріптерді көрсету және палитраларды басқару сияқты тапсырмалар үшін. Windows USER қосалқы жүйесі GDI-ді терезе жиектері мен мәзірлер сияқты UI элементтерін көрсету үшін қолданады. Басқа жүйелерде GDI-ға ұқсас компоненттер бар; мысалы, Mac OS-те QuickDraw, ал Linux және Unix жүйелерінде X Window System негізгі протоколы бар. GDI-нің аппараттық құралдарға тікелей қол жеткізу әдістеріне қарағанда маңызды артықшылықтары – оның масштабтау мүмкіндіктері мен нысаналық құрылғылардың абстрактілі бейнеленуі. GDI-ді пайдалану арқылы экран мен принтер сияқты бірнеше құрылғыда сурет салуға болады және әр жағдайда дұрыс көшірме алуға болады. Осы мүмкіндік Microsoft Windows үшін "Көргеніңіз – алған нәрсеңіз" типтес бағдарламалардың көпшілігі үшін маңызды. Жылдам графикалық рендеринг қажет етпейтін қарапайым ойындар GDI-ді пайдалана алады. Дегенмен, GDI-ді күрделі анимация үшін пайдалану қиын, бейне картасындағы жеке бейне кадрлармен синхрондау мүмкіндігі жоқ және 3D үшін аппараттық растрлеу қарастырылмаған. Қазіргі заманғы ойындар көбінесе DirectX, Vulkan немесе OpenGL пайдаланады.
Техникалық мәліметтер
GDI-де құрылғы контексі (DC) шығару құрылғысы үшін – мысалы, экран немесе принтер – мәтін мен кескіндердің қасиеттерін анықтайды. GDI нақты контексті сақтайды. Шығысты жасау үшін құрылғы контекстінің (HDC) дескрипторы қажет. Шығыс жасалғаннан кейін дескриптор босатылуы мүмкін. GDI қабықшаланған сызықтарды салу үшін Брезенхемнің сызық салу алгоритмін қолданады.
Ерте нұсқалары
GDI Windows жүйесінің бастапқы нұсқасында болды. MS DOS бағдарламалары графикалық аппаратты бағдарламалық үзілістер (кейде Video BIOS арқылы) және бейне жадына тікелей қолдану арқылы басқарған. Осылай жазылған код бейне жадының жалғыз пайдаланушысы болатынын күтеді, бұл Windows сияқты көп тапсырмалы ортада мүмкін емес еді. 1983 жылдың желтоқсанында BYTE журналы Microsoft компаниясының болашақ Windows жүйесінің алғашқы нұсқасында графикалық бейнелерді принтерлер мен мониторларға бірдей кодпен шығару жүйесін жоспарлап отырғанын талқылады. Windows 3.1x және Windows 9x жүйелерінде, егер сәйкес графикалық карта драйвері орнатылған болса, GDI 2D жеделдету үшін Bit blit мүмкіндіктерін пайдалана алады.
Windows XP-ге арналған
Windows XP-нің енгізілуімен GDI+ GDI-ді толықтырды. GDI+ C++ тілінде жазылған. Ол антиалиасты 2D графиканы, қозғалмалы нүктелі координаталарды, градиенттік көлеңкелеуді, күрделі жолдарды басқаруды, JPEG және PNG сияқты қазіргі заманғы графикалық файл форматтарына тікелей қолдауды және 2D көрсету конвейерінде аффиндік түрлендірулерді біріктіруді қамтамасыз етеді. GDI+ түсті көрсету үшін RGBA мәндерін пайдаланады. Бұл мүмкіндіктер Windows XP компоненттерінде, мысалы Microsoft Paint, Windows Picture and Fax Viewer, Photo Printing Wizard және My Pictures слайдшоу скринсейверінде байқалады. Олардың негізгі графикалық қабатта болуы Adobe Flash немесе SVG сияқты векторлық графика жүйелерін жүзеге асыруды едәуір жеңілдетеді. Сонымен қатар, .NET Framework GDI+ үшін System.Drawing атау кеңістігі арқылы басқарылатын интерфейс ұсынады. GDI+ Windows XP және одан кейінгі нұсқалармен бірге келеді, бірақ GDI+ динамикалық кітапханасын қолданбамен бірге тарата отырып, Windows-тың ескі нұсқаларында да пайдалануға болады. GDI+ мәтінді өңдеудің және ажыратымдылықтан тәуелсіздіктің қосымша мүмкіндіктеріне байланысты, мәтінді көрсетуді CPU жүзеге асырады. Нәтижесінде, аппараттық үдетілген GDI-ге қарағанда бірнеше есе баяу жұмыс істейді. Крис Джексон GDI-де секундына 99 000 глифті көрсетуге қабілетті мәтіндік кодты жазғанын көрсеткен бірнеше сынақтарды жариялады, бірақ GDI+ қолданған сол код секундына 16 600 глифті көрсетті. GDI+ мақсаты мен құрылымы тұрғысынан Apple QuickDraw GX қосалқы жүйесіне, сондай-ақ ашық кодты libart және Cairo кітапханаларына ұқсас.
Windows Vista жүйесі
Windows Vista-да GDI және GDI+ қолданбаларының барлығы, соның ішінде, жаңа композициялық қозғалтқыш – Үстел терезе менеджерінде (DWM) іске қосылады, ол аппараттық үдетуді қолдайды. Осыған байланысты, GDI өзі енді аппараттық үдетілмейді. Композиция операцияларының ерекшелігіне байланысты, терезелерді жылжыту жылдамдатылып, жауап беру уақыты қысқарады, себебі қолданба негізгі мазмұнды қайта өңдеуге қажеті болмайды.
GDI принтерлері
GDI принтері немесе Winprinter (Winmodem-ге ұқсас) – Windows іске қосылған хост-компьютерден шығысты қабылдауға арналған принтер. Хост-компьютер барлық басып шығару процесін жүзеге асырады: GDI бетті растрлік кескінді (bitmap) ретінде шығарады, оны принтер драйвері қабылдап, өңдеп, тиісті принтерге жібереді. GDI мен драйвердің өзара әрекеттесуі екі жақты; олар принтерден, мысалы, басып шығаруға дайындығы туралы немесе қағаздың таусылғаны туралы ақпарат алады. GDI-ға тәуелді емес принтерлер бетті көрсету үшін аппараттық құралдарды, микрокодты және жадты қажет етеді, ал GDI принтері осы мақсатта хост-компьютерді пайдаланады. Дегенмен, өзіндік басқару тілі бар принтер тиісті драйвері бар кез келген құрылғыдан деректерді қабылдай алады, ал GDI принтеріне Windows іске қосылған компьютер қажет. GDI принтерлерін желідегі компьютерлерге, Windows іске қосылған компьютерде ортақ принтер ретінде қосылған жағдайда қолжетімді етуге болады. pnm2ppa сияқты кейбір «жалпы» GDI драйверлері жасалған; олар GDI принтерлерін FreeBSD сияқты Windows емес операциялық жүйелермен үйлесімді етуге бағытталған, бірақ олар барлық принтерлерді қолдамайды. Көптеген қосымшалар дұрыс емес кодталған және GDI нысандарын пайдаланғаннан кейін босатпайды, бұл мәселені одан әрі ушықтырады. Қолжетімді GDI нысандарының жалпы саны Windows нұсқаларына байланысты өзгереді: Windows 9x-те нысандардың жалпы саны 1200-ге дейін шектелген; Windows 2000-де 16 384 нысан бар; Windows XP және одан кейінгі нұсқаларда (реестр арқылы) процеске 10 000 нысанды (бірақ бүкіл сессия үшін теориялық максимум 65 536) құрайтын конфигурацияланатын шек бар. Windows 8 және одан кейінгі нұсқалары GDI нысандарының шегін пайдаланушының жүйеге кіру сессиясына 65 536-ға дейін арттырады. Windows 3.1 және Windows 98 сияқты Windows-тың бұрынғы нұсқаларында пайдаланушыға жалпы жүйелік GDI ресурстарының қаншалықты қолданылып жатқанын бақылауға мүмкіндік беретін «Ресурс өлшегіші» бағдарламасы болған. Бұл ресурс өлшегіші өзі GDI нысандарын тұтынады. Windows 2000 және Windows XP сияқты кейінгі нұсқалар «Тапсырмалар менеджерінде» әрбір бағдарлама үшін GDI нысандарының пайдалануын көрсете алады, бірақ олар пайдаланушыға GDI-ның жалпы сыйымдылығын айта алмайды. GDI сыйымдылығының шектен шығуы Windows-тың өзіне әсер етіп, жаңа терезелердің ашылуына, мәзірлердің көрсетілуіне және ескертулердің пайда болуына кедергі келтіруі мүмкін. Мұндай жағдайды түзету қиын болуы мүмкін және жүйені мәжбүрлеп қайта іске қосу қажет болуы мүмкін, өйткені ол негізгі жүйелік бағдарламалардың жұмыс істеуіне кедергі келтіреді. Windows 8 және 8.1 жүйелерінде GDI сыйымдылығының толуы нәтижесінде қайта жүктеудің орнына мәжбүрлі түрде тіркеуден шығу жүзеге асырылады.
Орынбасары
Direct2D – GDI және GDI+ ішіндегі жаңа буын. Оның серігі DirectWrite – Uniscribe-ді ығыстырды. Олар Windows 7 және Windows Server 2008 R2 жүйелерімен бірге шығарылды, сондай-ақ Windows Vista және Windows Server 2008 (Platform Update орнатылған күйінде) үшін де қолжетімді болды. Кейін Microsoft Win2D-ді жасады, ол GDI сияқты тегін және ашық кодты кластық кітапхана. Win2D-нің негізгі қолданушылары C++, C# және Visual Basic. NET тілдерінде Universal Windows Platform қолданбаларын дамытатын бағдарламашылар.