Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Ważne
Nowoczesna platforma drukowania jest preferowanym sposobem komunikacji z drukarkami w systemie Windows. Zalecamy używanie sterownika klasy skrzynki odbiorczej IPP firmy Microsoft wraz z aplikacjami do obsługi drukowania (PSA), aby dostosować środowisko drukowania w systemie Windows 10 i 11 na potrzeby opracowywania urządzeń drukarki.
Aby uzyskać więcej informacji, zobacz Print Support App v1 and v2 design guide (Przewodnik projektowania aplikacji do obsługi wydruku w wersji 1 i 2).
Infrastruktura preanalizy jest mechanizmem, za pomocą którego Unidrv wymusza stosowanie pasmowego drukowania w zadaniu drukowania, dzięki czemu pierwsze odtworzenie pasma każdej strony jest pasmem, które zawiera całą stronę. Przejście preanalityczne nie zezwala na renderowanie i jest wykonywane tylko w celu umożliwienia analizy obiektów na stronie, zanim obiekty zostaną wyrenderowane.
Aby umożliwić preanalizę pełnostronicową, Unidrv najpierw określa powierzchnię urządzenia pełnostronicową w funkcji DrvEnableSurface, a następnie wskazuje, że pierwsze pasmo ma rozmiar całej strony za pomocą DrvQueryPerBandInfo. Po zakończeniu preanalizy Unidrv używa DrvQueryPerBandInfo, aby przywrócić obszar przycinania do jego rozmiaru sprzed włączenia preanalizy; Unidrv następnie renderuje na tej powierzchni. Ze względu na ograniczenia implementacji interfejsu GDI można włączyć preanalizę tylko wtedy, gdy tryb N-up jest ONE_UP lub jeśli pasek renderowania obejmuje całą stronę.
Poniższy pseudokod ilustruje logikę używaną do preanalizy.
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
Ponieważ funkcje preanalizy muszą działać z bieżącymi ogólnymi plikami opisu drukarki (GPD) i wtyczkami, kolejność warstw tekstu, wykrywanie pustych pasm i inne operacje są implementowane w sposób niewidoczny z perspektywy minidrivera. Minidriver może podłączyć DrvStartBanding i DrvNextBand, ale nie otrzyma pierwszego wywołania DrvNextBand, ponieważ pierwsze wywołanie DrvNextBand nie obejmuje renderowania. Wtyczka odbiera pierwsze wywołanie DrvNextBand tylko wtedy, gdy ustawia flagę w GPD, która włącza preanalizę na poziomie obiektu OEM (*PreAnalysisOptions: 8). W takim przypadku wtyczka musi podłączyć drvStartBanding i DrvNextBand, a wtyczka musi sprawdzić parametr pptl funkcji DrvStartBanding . Jeśli parametr pptl ma wartość inną niż NULL, preanaliza jest wyłączona. Jeśli parametr pptl ma wartość NULL, co wskazuje początek przebiegu preanalizy. W takim przypadku wtyczka powinna zakładać, że wszystkie wywołania do rysowania DDIs, które wtyczka przechwyciła, wynikają z przejścia preanalizy. Etap preanalizy kończy się pierwszym wywołaniem funkcji DrvNextBand, i renderowanie rozpoczyna się po pierwszym wywołaniu funkcji DrvNextBand. Kolejne wywołania tej funkcji będą zawierać dane renderowania.
*Tryby PreAnalizyOpcji
Tryb preanalizy jest kontrolowany w pliku GPD przez *PreAnalysisOptions: n nazwa atrybutu i parametr atrybutu. W poniższej tabeli wymieniono wartości parametrów, których można użyć z nazwą atrybutu *PreAnalysisOptions . W celu włączenia wielu opcji można połączyć co najmniej dwie z tych wartości.
Wartość znaczenia parametru 0
Wyłącz wszystkie tryby preanalizy.
1
Tryb domyślny. Włącz analizę tekstu monochromatycznego z kolejnością i optymalizację pustego przedziału. Ten tryb jest aktywowany dla urządzeń z obsługą czcionek możliwych do pobrania lub czcionką urządzenia oraz wysokiej rozdzielczości (600 dpi lub wyższej), 24-bitowych trybów renderowania BPP.
2
Włącz optymalizację 1 BPP dla 24 BPP w wywołaniach zwrotnych IPrintOemUni ImageProcessing.
4
Włącz operacje urządzenia StretchBlt.
8
Włącz preanalizę na poziomie obiektu OEM.
Analiza tekstu monochromatycznego w porządku Z z optymalizacją paska pustego
*PreAnalysisOptions: 1
Ustawienie parametru *PreAnalysisOptions na 1 umożliwia unidrv wykonywanie następujących operacji:
Wykrywanie problemów w kolejności wyświetlania między obiektami tekstowymi i graficznymi w drukarkach monochromatycznych.
Wykonaj optymalizację pustego pasma.
Pierwsza operacja rozwiązuje problemy z uporządkowaniem z osi Z, które pojawiają się, gdy tekst przesłany do drukarki monochromatycznej jest później nadpisywany lub w inny sposób współdziała z obiektami graficznymi. Problemy z kolejnością Z są często spowodowane przez obiekty graficzne zawierające złożone klipy, dzięki czemu Unidrv nie może pobrać białego prostokąta, który czyści wcześniej pobrany tekst.
Unidrv przeprowadza przejście preanalizy na każdej stronie, zanim przeprowadzi przejście renderowania. Unidrv robi to, aby określić, czy jakikolwiek tekst zostanie zastąpiony obiektem transferu bloków bitowych (blt), który używa złożonego klipu, którego nie można symulować. W związku z tym tekst jest renderowany na powierzchni mapy bitowej zamiast być pobieranym bezpośrednio, aby obiekty renderowane później mogły poprawnie współdziałać z tekstem.
Ponadto, w przypadku urządzeń, które nie obsługują białych prostokątów, Unidrv sprawdza, czy jakikolwiek tekst jest nakładany przez operacje blt, nawet jeśli nie zawierają one złożonych wycinków. Unidrv renderuje tekst na powierzchni zamiast pobierać go bezpośrednio do drukarki.
Następujące polecenia rysunku są testowane pod kątem tekstu, który może zostać pokryty przez kolejne operacje blt:
W związku z tym ten tryb powinien rozwiązać wszystkie problemy z kolejnością między obiektami tekstowymi i wypełnionymi regionami. Należy pamiętać, że nadal mogą występować problemy z tekstem i nakładanymi wierszami. Te sytuacje nie są uwzględniane, ponieważ takie rozwiązanie może spowodować pobranie prawie całego tekstu zamiast rysowania.
Ta funkcja nie poprawia problemów z kolejnością związanych z używaniem czcionek systemowych. Jeśli aplikacja lub sterownik wybrał tryb czcionki urządzenia, sterownik nie może rozwiązać tego problemu i nie będzie mógł renderować czcionek urządzeń na powierzchni.
Druga operacja umożliwia aplikacji Unidrv optymalizowanie pod kątem pustych regionów na stronie. W tym trybie unidrv pomija puste górne i dolne marginesy, a także wszystkie duże puste regiony w środku strony. Ten tryb, który jest przeznaczony do użytku w drukowaniu kolorów, zwiększa wydajność, minimalizując liczbę przejść pasma niezbędnych do renderowania strony.
W czasie preanalizy Unidrv określa, gdzie na stronie będzie miało miejsce rysowanie. Optymalizacja pustego przedziału jest włączona za każdym razem, gdy jest włączona wstępna analiza lub gdy drukarka używa 24 pasm renderowania BPP o wysokiej rozdzielczości (600 dpi lub wyższej). Powinno to spowodować zauważalny wzrost wydajności na 24 renderowaniu BPP dla drukarek atramentowych i nie wymaga żadnych zmian w istniejących wtyczkach OEM.
Optymalizacja czarnego pasma
*PreAnalysisOptions: 2 *% 1 bpp ImageProcessing bitmaps
Ustawienie parametru *PreAnalysisOptions na 2 umożliwia Unidrv użycie większej powierzchni pasmowej 1-BPP do renderowania regionów zawierających tylko jednolite czarne obiekty, zamiast renderowania całej strony na 24-BPP. Ten tryb jest podobny do optymalizacji pustego pasma, z wyjątkiem tego, że określa również jednolite czarne regiony (w przeciwieństwie do regionów kolorowych) na stronie. Tylko obiekty, które są kompletnie czarne (bez szarych odcieni) mogą być renderowane na powierzchni rastrowania 1 BPP, ponieważ półton skonfigurowany dla 24-bitowych kolorów BPP nie jest poprawnie renderowany w 1-bitowej monochromatycznej przestrzeni.
Unidrv tworzy dwie powierzchnie w funkcji DrvEnableSurface : jedną dla koloru, a drugą dla 1 monochromatycznego BPP. Unidrv używa tej samej pamięci dla każdej z nich, więc nie jest wymagana żadna dodatkowa pamięć. Preanaliza strony określa, czy strona zawiera stałe czarne lub puste regiony, dla których można używać większych przedziałów niż dla regionów zawierających kolory. Tylko regiony kolorów wymagają użycia mniejszej powierzchni pasmowej kolorów.
Korzystając z tej samej ilości pamięci, powierzchnia monochromatyczna o głębi 1 bit na piksel (1 BPP) może być 24 razy większa niż powierzchnia kolorowa o głębi 24 bitów na piksel (24 BPP). W związku z tym obraz zawierający kolor tylko na środku strony można podzielić na trzy regiony: górny region, region zawierający kolor i dolny region. Te trzy regiony można podzielić w następujący sposób: górny region można umieścić w jednym monochromatycznym pasmie, region, który zawiera kolor, można podzielić na tyle różnych kolorów, ile jest potrzebnych do pokrycia, a dolny region można umieścić w jednym monochromatycznym pasmie.
Ta funkcja wymaga od producenta OEM obsługi wywołania zwrotnego IPrintOemUni ImageProcessing i obsługi zrzutu danych rasterowych. Bieżąca obsługa wtyczki OEM dla wywołania zwrotnego IPrintOemUni ImageProcessing musi zostać rozszerzona w celu akceptowania albo 24-bitowych pasm BPP, albo 1-bitowych pełnych czarnych pasm BPP.
Obsługa operacji Device StretchBlt
*PreAnalysisOptions: 4
Ustawienie parametru *PreAnalysisOptions na wartość 4 umożliwia aplikacji Unidrv pobieranie wywołań DrvStretchBlt bezpośrednio do urządzeń obsługujących operacje stretchblt.
Gdy Unidrv generuje dane kolorowe o 24-bitowej głębi, wszystkie obrazy stretchblt rozciągają się do rozdzielczości urządzenia, co powoduje duże ilości danych rastrowych, które należy pobrać. Może to spowodować niską wydajność, oprócz braku pamięci na wielu drukarkach wschodnioazjatyckich.
Wtyczka renderowania minidriver jest wymagana do korzystania z trybu stretchblt, ponieważ musi podłączyć OEMStretchBlt i udostępnić własne polecenia pobierania obrazów. Unidrv umożliwia hak OEMStretchBlt tylko w przypadku wywołań, które można pobrać bezpośrednio. W związku z tym wtyczka nie jest odpowiedzialna za obsługę problemów z zamówieniami. Wtyczka wymaga tylko bezpośredniego pobrania danych obrazu źródłowego zawartych w wywołaniach OEMStretchBlt, które odbiera. Wtyczka ma również możliwość odesłania obrazu z powrotem do Unidrv, jeśli obraz jest w formacie, którego wtyczka nie obsługuje lub nie może przetworzyć.
Za każdym razem, gdy obiekty są pobierane bezpośrednio na urządzenie, gdy inne dane są renderowane w systemie, mogą występować problemy z kolejnością lub niespójności w półtonach. Ten tryb używa preanalizy w celu określenia, które stretchblty można przetworzyć bezpośrednio. Tylko rozciągnięcia, które nie zawierają maski ani złożone wycinki, będą brane pod uwagę podczas bezpośredniego pobierania. Jeśli późniejszy obiekt nakłada się na jakąkolwiek z operacji StretchBlt rozważanych do bezpośredniego pobrania, żadne obiekty nie zostaną pobrane bezpośrednio. Ta zasada powinna poprawić wydajność i zapewnić, że żaden obraz nie zawiera półtonu zarówno z systemu, jak i z urządzenia, co skutkuje niską jakością danych wyjściowych wydruku.
Haki preanalizy OEM Object-Level
*PreAnalysisOptions: 8
Ustawienie parametru *PreAnalysisOptions na 8 umożliwia OEM zainicjowanie przebiegu przedanalizy, aby wszystkie obiekty na całej stronie zostały odtworzone po wywołaniu DrvStartBanding bez względu na rozmiar pasma. Nie można rysować w ramach Unidrv podczas etapu przedanalizy, ale producenci OEM mogą podłączyć wszystkie wywołania funkcji rysujących DrvXxx w celu przeanalizowania obiektów na stronie.
Funkcjonalność w tym trybie koncentruje się na kolorowych drukarkach atramentowych, dzięki czemu producenci OEM mogą używać korekty kolorów opartej na obiektach lub renderowania. Na przykład niektóre drukarki muszą obsługiwać czarne obiekty inaczej, jeśli przecinają się z obiektami kolorowymi, w przeciwieństwie do czarnych obiektów występujących samodzielnie. Inni producenci OEM mogą potrzebować półtonów dla obiektów stretchblt, które różnią się od obiektów bitblt. Obiekty Stretchblt mogą być w dowolnym formacie pliku graficznego obsługiwanego przez system Windows, na przykład .png lub .jpg. Obiekty Bitblt są wyłącznie mapami bitowymi.
Gdy ten tryb jest włączony w GPD, Unidrv definiuje powierzchnię jako powierzchnię podziału na pasy, powodując, że pierwsze odtwarzanie obejmuje całą stronę. W tym celu Unidrv ustawia okno klipu GDI na całą stronę. Unidrv umożliwia łączenie wszystkich poleceń rysunku, ale zwraca przed wykonaniem dowolnego rysunku. Po kolejnych przejściach Unidrv resetuje okno klipów z powrotem do normalnego rozmiaru pasma i pasków jak zwykle.
OEM-y są zobowiązane do zaczepienia zarówno DrvStartBanding, jak i DrvNextBand po włączeniu tego trybu w GPD. Muszą przetestować parametr pptl funkcji DrvStartBanding , aby określić, czy unidrv może włączyć preanalizę w tym trybie na określonej stronie. Jeśli parametr pptl ma wartość NULL, usługa Unidrv włączyła preanalizę. Unidrv używa parametru pptl , ponieważ nie ma znaczenia w tym momencie (nie został zaktualizowany o położenie pasma. W przypadku preanalizy pozycja pasma jest zawsze ustawiona na (0, 0)). Jeśli parametr pptl ma wartość NULL, to OEM powinien uznać wszystkie wywołania rysowania przed pierwszym DrvNextBand za część preanalizy i nie powinien zezwalać na rysowanie na powierzchni.
Koniec preanalizy jest sygnalizowany przez wywołanie funkcji OEMNextBand . Parametr pptl przekazywany do aplikacji OEMNextBand nie ma wartości NULL. To wywołanie służy tylko do zwracania odpowiedniej wartości pptl do Unidrv. Wtyczki mogą same ustawić wartość pptl lub wywołać ponownie w Unidrv (podobnie jak w poprzednim przykładzie pseudokodu na początku tego artykułu). Ponieważ powierzchnia paskowania, którą parametr pso od OEMNextBand określił w pierwszym wywołaniu do OEMNextBand, nie została jeszcze renderowana, wtyczka nie powinna wysyłać swojej zawartości do urządzenia.