Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Důležité
Moderní tisková platforma je upřednostňovaná pro komunikaci s tiskárnami ve Windows. Doporučujeme použít ovladač třídy doručené pošty IPP od Microsoftu spolu s tiskovými podpůrnými aplikacemi (PSA) k přizpůsobení prostředí tisku ve Windows 10 a 11 pro vývoj zařízení tiskárny.
Další informace najdete v průvodci návrhem aplikace podpory tisku v1 a v2.
Předanalyzační infrastruktura je mechanismus, kterým Unidrv vynutí banding na tiskové úloze tak, aby první pásmo přehrání každé stránky bylo pásmo, které obsahuje celou stránku. Předanalyzační průchod neumožňuje vykreslování a provádí se pouze k povolení analýzy objektů na stránce před vykreslením objektů.
Chcete-li povolit preanalyzi na celé stránce, Unidrv nejprve určuje povrch zařízení pro celou stránku v rámci funkce DrvEnableSurface a pak uvádí, že první pruh má velikost celé stránky pomocí DrvQueryPerBandInfo. Po dokončení předanalyzování použije Unidrv DrvQueryPerBandInfo k obnovení velikosti oblasti výřezu na hodnotu před povolením předanalyzování, a Unidrv následně vykreslí na tento povrch. Z důvodu omezení implementace GDI je možné předanalyzování povolit pouze v případě, že je režim N-up ONE_UP nebo pokud je vykreslovací pásmo celá stránka.
Následující pseudokód znázorňuje logiku použitou pro předanalyzi.
DrvEnableSurface
if( preanalysis enabled )
Use dummy device surface
DrvStartDoc
For each physical page
{
DrvStartPage
DrvStartBanding
For each banding surface
{
DrvQueryPerBandInfo
// Set sizlBand member of PERBANDINFO
if( preanalysis_pass )
pbi.sizlBand = {whole page}
else
pbi.sizlBand = {normal band}
Carry out rendering operations
if ( ( preanalysis pass && OEM preanalysis enabled ) || !preanalysis_pass ) {
Call OEM hooks
DrvNextBand
}
if ( ( preanalysis pass && OEM preanalysis enabled ) || !preanalysis_pass )
Call OEMNextBand
if( preanalysis pass ) {
Disable preanalysis
Switch from dummy device surface to real device surface
}
if( last band )
Write end page character from GPD
} // for each banding surface
} // for each physical page
DrvEndDoc
Vzhledem k tomu, že funkce předanalyzace musí pracovat s aktuálními obecnými soubory s popisem tiskárny (GPD) a moduly plug-in, jsou textové pořadí vykreslování, detekce prázdných pásem a další operace implementovány neviditelně z pohledu minidriveru. Minidriver může připojit DrvStartBanding a DrvNextBand, ale první volání DrvNextBand neobdrží, protože toto volání neobsahuje žádné vykreslování. Modul plug-in obdrží první volání DrvNextBand pouze v případě, že nastaví příznak v GPD, který umožňuje předanalyzi na úrovni objektu OEM (*PreAnalysisOptions: 8). V tomto případě musí modul plug-in připojit DrvStartBanding a DrvNextBand a modul plug-in musí zkontrolovat parametr pptl funkce DrvStartBanding . Pokud parametr pptl nemá hodnotu NULL, je předanalyza zakázána. Pokud je parametr pptlNULL, který označuje začátek předanalyzačního průchodu. V tomto případě by měl modul plug-in předpokládat, že všechna volání k vykreslovacím DDI, která modul plug-in zachytil, pocházejí z předanalyzačního průchodu. Předanalyzační průchod končí prvním voláním funkce DrvNextBand a vykreslování začíná po prvním volání funkce DrvNextBand . Následná volání této funkce budou obsahovat vykreslovací data.
*Režimy PreAnalysisOptions
Preanalyzační režim je řízen v souboru GPD pomocí *PreAnalysisOptions: n název atributu a parametr atributu. Následující tabulka uvádí hodnoty parametrů, které lze použít s názvem atributu *PreAnalysisOptions . Dvě nebo více těchto hodnot lze zkombinovat, aby bylo možné povolit více možností.
Hodnota významu parametru 0
Zakažte všechny předanalyzační režimy.
1
Výchozí režim. Povolte analýzu textu s monochromatickým pořadím vrstev a optimalizaci prázdných pásem. Tento režim je povolený pro zařízení s podporou písma ke stažení nebo písmem zařízení a vysokým rozlišením (600 dpi nebo vyšší), 24 režimů vykreslování BPP.
2
Povolit optimalizaci 1 BPP pro zpětná volání u 24 BPP IPrintOemUni ImageProcessing.
4
Povolte operace StretchBlt na zařízení.
8
Povolte předanalyzi na úrovni objektu OEM.
Monochromatická analýza textu Z-Order s optimalizací prázdného pásma
*PreAnalysisOptions: 1
Nastavení parametru *PreAnalysisOptions na 1 umožňuje unidrv provádět následující operace:
Rozpozná problémy v pořadí vykreslování mezi textem a grafickými objekty v monochromatických tiskárnách.
Proveďte optimalizaci prázdných pásem.
První operace řeší problémy s pořadím z-úrovní, ke kterým dochází, když je text stažený do monochromatické tiskárny později přepsán nebo jinak interaguje s grafickými objekty. Problémy s pořadím vykreslování jsou často způsobeny grafickými objekty, které obsahují složité výřezy, takže Unidrv není schopen stáhnout bílý obdélník, který vymaže dříve stažený text.
Unidrv provádí předběžný analytický průchod na každé stránce, než provede průchod vykreslování. Unidrv to dělá, aby se zjistilo, jestli se jakýkoli text překryje objektem blt (bit-block transfer), který používá složitý klip, který nelze simulovat. Proto se text vykresluje na rastrový obrázek povrchu místo toho, aby se stahovaly přímo, aby objekty vykreslené později správně interagovaly s textem.
Kromě toho u zařízení, která nepodporují bílé obdélníky, Unidrv kontroluje, jestli se žádný text nepřekryje blts, i když neobsahují složité klipy. Unidrv vykreslí text na povrch místo toho, aby ho stáhl přímo do tiskárny.
Následující příkazy kreslení se testují na text, který by mohl být překryt následujícími blts.
Tento režim by proto měl opravit všechny problémy pořadí vykreslování mezi textem a objekty vyplněné oblasti. Všimněte si, že stále můžou být problémy s textem a překryvnými řádky. Tyto situace nejsou zahrnuty, protože takové řešení může mít za následek stažení téměř veškerého textu místo vykreslení.
Tato funkce neopravuje problémy s pořadím vykreslování spojené s používáním písem zařízení. Pokud aplikace nebo ovladač vybral režim písma zařízení, ovladač nemůže tento problém opravit a nebude moct vykreslit písma zařízení na povrch.
Druhá operace umožňuje unidrv optimalizovat pro prázdné oblasti na stránce. V tomto režimu Unidrv přeskočí prázdné horní a dolní okraje a také všechny velké prázdné oblasti uprostřed stránky. Tento režim, který je určený pro tisk barev, zlepšuje výkon minimalizací počtu pruhů potřebných k vykreslení stránky.
Během předanalyzačního průchodu určuje Unidrv, kde se výkres na stránce objeví. Optimalizace prázdných pásem je povolena při každém povolení předanalyzy nebo při použití 24 vykreslovacích pásem BPP s vysokým rozlišením (600 dpi nebo vyšší). Výsledkem by mělo být výrazné zvýšení výkonu při vykreslování 24 BPP pro tiskárny s inkoustovým proudem a nevyžaduje žádné změny stávajících modulů plug-in OEM.
Optimalizace černých pásem
*PreAnalysisOptions: 2 *% 1 bpp ImageProcessing bitmaps
Nastavení parametru *PreAnalysisOptions na hodnotu 2 umožňuje Unidrv použít větší jednobarevnou plochu 1 BPP k vykreslení oblastí, které obsahují pouze plné černé objekty, spíše než vykreslovat celou stránku v režimu 24 BPP. Tento režim se podobá optimalizaci prázdných pásem, s výjimkou, že na stránce také určuje plné černé oblasti (na rozdíl od barevných oblastí). Na 1bitové ploše BPP lze vykreslit pouze objekty, které jsou zcela černé (bez šedých odstínů), protože polotónové nastavení pro barvu 24 BPP není v 1bitové monochromatické ploše BPP správně vykresleno.
Unidrv vytvoří dvě plochy v rámci funkce DrvEnableSurface: jednu pro barvu a druhou pro 1 BPP monochromatické. Unidrv používá stejnou paměť pro každou z nich, takže není nutná žádná další paměť. Předanalyzování stránky určuje, zda stránka obsahuje souvislé černé nebo prázdné oblasti, pro které lze použít větší pásma než pro oblasti obsahující barvy. Pouze oblasti barev vyžadují použití menší plochy barevného pásu.
Při použití stejného množství paměti může být 1 monochromatický povrch BPP 24krát větší než barevný povrch BPP 24. Obrázek, který obsahuje barvu pouze uprostřed stránky, je tedy možné rozdělit do tří oblastí: horní oblast, oblast obsahující barvu a dolní oblast. Tyto tři oblasti mohou být pruhované takto: horní oblast může být umístěna v jednom monochromatickém pásmu, oblast, která obsahuje barvu, lze rozdělit do tolik barevných pásem, kolik je potřeba k pokrytí, a dolní oblast lze umístit do jedné monochromatické pásmo.
Tato funkce vyžaduje, aby OEM podporovali zpětné volání IPrintOemUni ImageProcessing a zpracovávali výpis rastrových dat. Aktuální podpora plug-inu OEM pro zpětné volání IPrintOemUni ImageProcessing musí být vylepšena tak, aby přijímala buď 24bitové pruhy na pixel nebo plně černé pruhy s 1 bitem na pixel.
Podpora operací StretchBlt zařízení
*PreAnalysisOptions: 4
Nastavení parametru *PreAnalysisOptions na 4 umožňuje unidrv stáhnout volání DrvStretchBlt přímo na zařízení, která podporují operace stretchblt.
Když Unidrv generuje 24bitová barevná data BPP, všechny stretchblt obrázky jsou přizpůsobeny rozlišení zařízení, což vede k velkému množství rastrových dat, která je potřeba stáhnout. To může mít za následek nízký výkon, kromě stavu nedostatku paměti na mnoha východoasijských tiskárnách.
Modul plug-in pro vykreslení minidriveru je nutný k využití režimu stretchblt, protože musí připojit OEMStretchBlt a poskytnout vlastní příkazy pro stažení obrázku. Unidrv umožňuje připojení OEMStretchBlt pouze na volání, která lze stáhnout přímo. Modul plug-in proto není zodpovědný za řešení problémů s vrstevním řazením. Modul plug-in musí stáhnout přímo zdrojová data obrázku obsažená v volání OEMStretchBlt, která přijímá. Modul plug-in má také možnost předání obrázku zpět na Unidrv, pokud je obrázek ve formátu, který plug-in nepodporuje nebo nemůže stáhnout.
Kdykoli se objekty stáhnou přímo do zařízení, zatímco se v systému vykreslují jiná data, můžou se jednat o problémy se z-indexem nebo nekonzistenci v polotónu. Tento režim používá předanalyzi k určení, které roztažení lze stáhnout přímo. Pouze stretchblty, které neobsahují žádnou masku ani složitý výřez, budou zvažovány pro přímé stahování. Pokud pozdější objekt překryje nějaký ze stretchbltů, které se zvažují pro přímé stažení, nebudou se žádné objekty stahovat přímo. Tento princip by měl zlepšit výkon a měl by zajistit, aby žádný obrázek neobsahovával polotón ze systému i ze zařízení, což vede k nízké kvalitě výstupu tisku.
OEM Object-Level předanalyzační háky
*PreAnalysisOptions: 8
Nastavení parametru *PreAnalysisOptions na 8 umožňuje výrobce OEM zahájit předanalyzační průchod tak, aby se všechny objekty na celé stránce přehrávali po volání DrvStartBanding bez ohledu na velikost pásma. Během předanalýzního průchodu není v rámci Unidrv povoleno žádné kreslení, ale OEM mohou napojit všechna volání kreslení DrvXxx, aby analyzovaly objekty na stránce.
Funkce v tomto režimu se zaměřuje na barevné inkoustové tiskárny, aby OEM mohly používat barevnou korekci nebo vykreslování na základě objektů. Například některé tiskárny musí zpracovávat černé objekty jinak, pokud se protínají s barevnými objekty, a ne s černými objekty, které se zobrazují samy. Jiní výrobci OEM mohou chtít polotón pro objekty stretchblt, které se liší od objektů bitblt. Stretchblt objekty mohou být v libovolném formátu grafického souboru, který Systém Windows podporuje, například .png nebo .jpg. Objekty Bitblt jsou výhradně rastrové obrázky.
Pokud je režim v GPD povolen, Unidrv definuje povrch jako pruhovací plochu, ale způsobí, že prvotní vykreslení proběhne na celé stránce. Provedením tohoto Unidrv nastaví výřezové okno GDI na celou stránku. Unidrv umožňuje, aby všechny příkazy kreslení byly připojeny, ale vrací se před provedením jakéhokoli kreslení. Při následujících průchodech Unidrv resetuje klipové okno zpět na normální velikost pásma a vytváří pásma obvyklým způsobem.
OEM musí připojit jak DrvStartBanding, tak DrvNextBand při povolení tohoto režimu v GPD. Musí otestovat parametr pptl funkce DrvStartBanding , aby zjistili, jestli unidrv může povolit preanalyzi v tomto režimu na zadané stránce. Pokud je parametr pptlNULL, pak unidrv povolil předanalyzační. Unidrv používá parametr pptl , protože v tomto okamžiku nemá žádný význam (nebyl aktualizován o pozici pásma. U předanalyzování je pozice pásma vždy nastavená na (0, 0)). Pokud je parametr pptlNULL, měl by výrobce OEM zvážit všechna volání výkresu před prvním DrvNextBand jako součást předběžné analýzy a nemělo by být povoleno žádné kreslení na povrch.
Konec preanalyzace je signalizovat voláním funkce OEMNextBand . Parametr pptl předaný do OEMNextBand nemá hodnotu NULL. Toto volání se používá pouze k vrácení odpovídající hodnoty pptl Unidrv. Moduly plug-in můžou nastavit hodnotu pptl sami nebo můžou zavolat zpět do unidrv (podobně jako v předchozím příkladu pseudokódu na začátku tohoto článku). Vzhledem k tomu, že povrch pro pruhování, který parametr pso určil v prvním volání OEMNextBand, ještě nebyl vykreslen, obsah modulu plug-in by neměl být zaslán do zařízení.