IPrintOemUni::ImageProcessing 方法 (prcomoem.h)
方法 IPrintOemUni::ImageProcessing
可以與 Unidrv 支援的印表機搭配使用,以修改圖像點陣圖數據,以執行色彩格式設定或半角設定。 方法可以將修改過的位陣圖傳回 Unidrv,或將它直接傳送到列印後台處理程式。
語法
HRESULT ImageProcessing(
PDEVOBJ pdevobj,
PBYTE pSrcBitmap,
PBITMAPINFOHEADER pBitmapInfoHeader,
PBYTE pColorTable,
DWORD dwCallbackID,
PIPPARAMS pIPParams,
[out] OUT PBYTE *ppbResult
);
參數
pdevobj
呼叫端提供的 DEVOBJ 結構的指標。
pSrcBitmap
呼叫端提供的輸入 DIB 指標。
pBitmapInfoHeader
呼叫端提供的 BITMAPINFOHEADER 結構的指標,描述 pSrcBitmap 所指向的點陣圖。 位圖INFOHEADER 結構會在 Microsoft Windows SDK 檔中說明。
pColorTable
呼叫端提供的色彩表格指標。 只有當輸出格式為每像素 8 位時,才會使用此參數。 如需詳細資訊,請參閱接下來的<備註>一節。
解譯點陣圖時,您必須檢查色彩表格。 Unidrv 可以修改點陣圖中的色彩,但它也會在色彩表格中進行對應的調整,因此不會有任何凈變更。 不過,如果您忽略色彩表格變更,並只檢查位圖,影像可能無法正確列印。 如需範例,請參閱 HT_Get8BPPMaskPalette 中的 pPaletteEntry 參數討論。
dwCallbackID
指派給 ColorMode 功能目前所選選項之 *IPCallbackID 屬性的呼叫端提供值。 如需詳細資訊,請參閱接下來的<備註>一節。
pIPParams
呼叫端提供的 IPPARAMS 結構的指標。
[out] ppbResult
包含緩衝區位址的記憶體位置指標。 緩衝區的內容取決於應該傳送已轉換 DIB 的位置。
如果這個方法想要將轉換的 DIB 傳回 Unidrv 且成功轉換,它應該將 *ppbResult 設定為包含已轉換 DIB 的緩衝區位址,而且應該傳回S_OK。 如果轉換失敗,方法應該將 *ppbResult 設定為 NULL,而且應該傳回E_FAIL。
如果這個方法想要將已轉換的 DIB 傳送至多任務緩衝處理器,而且轉換成功,此方法應該將 *ppbResult 設定為 TRUE,而且應該傳回S_OK。 如果轉換失敗,方法應該將 *ppbResult 設定為 FALSE ,而且應該傳回E_FAIL。 如需詳細資訊,請參閱一節中的*DevBPP 和 *DevNumOfPlanes 屬性的討論。
傳回值
方法必須傳回下列其中一個值。
傳回碼 | 描述 |
---|---|
|
作業成功。 |
|
作業失敗。 |
|
此方法尚未實作。 |
來源位圖特性
目的地點陣圖特性
備註
方法 IPrintOemUni::ImageProcessing
可用來修改圖像位圖,再將它們傳送到列印後台處理程式。 其目的是要針對 Unidrv 不支援的色彩模式和半角方法提供自定義支援。 將點陣圖傳送至列印多任務緩衝處理器的印表機驅動程式 (,而不是將它傳回 Unidrv) 必須將印表機 GPD 檔案中的 *DevBPP 和 *DevNumOfPlanes 屬性設定為零。
如果實作 方法,而且目前色彩格式的 GPD 檔案專案包含 *IPCallbackID 屬性,Unidrv 會在每次有位圖可用時呼叫 方法。 呼叫會在 GDI 轉譯位圖之後進行,然後傳送至多任務緩衝處理程式。 (如需 *IPCallbackID 屬性的相關信息,請參閱 ColorMode Feature.)
如果 由 dwCallbackID 指定的目前色彩模式是 Unidrv 所支援的模式,則 IPrintOemUni::ImageProcessing
方法應該在收到的點陣圖上執行半角運算,並將它傳回 Unidrv 以進行多任務緩衝處理。 如果目前的色彩模式是 Unidrv 不支援的模式,則方法必須執行半角運算,然後多任務緩衝處理位圖。
如果方法只執行半角作業,它必須執行下列動作:
- 對數據執行半角運算,如 IPPARAMS 結構的 pHalftoneOption 成員所表示。
- 將修改過的影像數據放在緩衝區中,並提供緩衝區的位址做為方法的傳回值,以將修改過的影像數據傳回 Unidrv。 傳回的緩衝區可以是 pSrcBitmap 指向的緩衝區,也可以是本機配置的緩衝區。
若要處理自訂的色彩格式設定, IPrintOemUni::ImageProcessing
方法必須執行下列動作:
- 將 pSrcBitmap 和 pBitmapInfoHeader 參數值所描述的 DIB 資料轉換成 dwCallbackID 所指示的色彩格式。
- 對數據執行半角運算,如 IPPARAMS 結構的 pHalftoneOption 成員所表示。
- 藉由呼叫 IPrintOemDriverUni::D rvWriteSpoolBuf 方法,將數據傳送至列印後台處理程式。
- 對 IPrintOemDriverUni::D rvXMoveTo 和 IPrintOemDriverUni::D rvYMoveTo 方法進行適當的呼叫,以修改印表機的游標位置。
dwCallbackID 參數會指出應該執行的任何色彩格式設定類型。 在印表機的 GPD 檔案內,ColorMode 功能的每個 *選項項目都會描述色彩格式。 如果格式需要由 方法處理 IPrintOemUni::ImageProcessing
,其 *Option 項目必須包含 *IPCallbackID 屬性。 當 Unidrv 呼叫 方法時 IPrintOemUni::ImageProcessing
,它會提供與 ColorMode 功能目前選取之選項相關聯的屬性值。 此值是 dwCallbackID 參數的值。
IPrintOemUni::ImageProcessing
無論是執行色彩格式設定作業和多任務緩衝處理影像數據,還是只執行半角作業並將處理的點陣圖傳回 Unidrv,如果方法為目的地位圖或其他用途配置大量記憶體,則應該匯出 IPrintOemUni::MemoryUsage 方法。 否則,系統效能可能會降低。
如果實作 方法,則會針對頁面上的每個點陣區域呼叫此方法。 不過,如果區域是空白的,IPPARAMS 結構的 bBlankBand 成員會設定為 TRUE,這表示區塊是空白且數據無效。 因為帶狀可分成空白和非空白區域的替代區塊,以將效能優化,所以區塊大小不一定對應到訊號範圍大小。
pSrcBitmap 和 pBitmapInfoHeader 所描述的來源位圖具有下列特性:
- DIB 內容由上而下排序且未壓縮。
- 數據格式是處理 色彩格式中列出的格式。
- 如果格式需要色彩表格,表格會由 pColorTable 指向。
- 色彩數據的格式PRIMARY_ORDER_CBA,如 GDIINFO 結構 ulPrimaryOrder 成員的描述中所述。 換句話說,如果色彩格式為 RGB 或 CMY,則最小有效 n 位必須包含藍色或黃色值,下一 個 n 位必須包含綠色或 magenta 值,而下 n 個位必須包含紅色或青色值。 未使用的位位於最重要的位置。 如果格式每圖元使用 4 位,則 n 為 1。 針對每個圖元 24 位, n 為 8,如下圖所示。 針對 CMYK,n 位的第四個群組包含黑色。
上圖描述兩個像素PRIMARY_ORDER_CBA格式的色彩數據,每個圖元 24 位的色彩數據。 從低記憶體位址移至高記憶體位址,有八位藍色數據、八位綠色數據,再從八位紅色數據移至高記憶體位址,之後模式會重複。 這也稱為 BGR 裝置輸出順序。
對於半角運算,處理過的位圖會傳回 Unidrv,傳回的點陣圖必須具有下列特性:
- DIB 內容必須是由上而下排序且未壓縮。
- 數據格式必須是處理色彩格式中所列的數據格式,而且必須與 dwCallbackID 所識別之色彩格式的 *DevBPP 和 *DevNumOfPlanes 屬性相容。 (如需這些屬性的相關信息,請參閱 ColorMode Feature.) 的選項屬性
- 如果格式需要色彩表格,則必須建立數據表,而且必須在 pColorTable 中傳回其位址。
- 色彩數據必須以PRIMARY_ORDER_CBA格式傳回,如來源位圖所述。
-
pBitmapInfoHeader 指定的 BITMAPINFOHEADER 結構必須同時描述輸入和輸出點陣圖。 方法
IPrintOemUni::ImageProcessing
不得變更結構的內容。
IPrintOemUni::ImageProcessing
選擇性的。 如果轉譯外掛程式實作此方法,外掛程式的 IPrintOemUni::GetImplementedMethod 方法必須在收到 “ImageProcessing” 做為輸入時傳回S_OK。
規格需求
需求 | 值 |
---|---|
目標平台 | 桌面 |
標頭 | prcomoem.h (包含 Prcomoem.h) |