JP2014002591A - 画像処理装置、画像処理方法、コンピュータプログラム - Google Patents

画像処理装置、画像処理方法、コンピュータプログラム Download PDF

Info

Publication number
JP2014002591A
JP2014002591A JP2012137915A JP2012137915A JP2014002591A JP 2014002591 A JP2014002591 A JP 2014002591A JP 2012137915 A JP2012137915 A JP 2012137915A JP 2012137915 A JP2012137915 A JP 2012137915A JP 2014002591 A JP2014002591 A JP 2014002591A
Authority
JP
Japan
Prior art keywords
rendering
edge
objects
processing
data
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP2012137915A
Other languages
English (en)
Other versions
JP2014002591A5 (ja
Inventor
Morikazu Ito
盛一 伊藤
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Canon Inc
Original Assignee
Canon Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Canon Inc filed Critical Canon Inc
Priority to JP2012137915A priority Critical patent/JP2014002591A/ja
Priority to US13/919,162 priority patent/US9443174B2/en
Publication of JP2014002591A publication Critical patent/JP2014002591A/ja
Publication of JP2014002591A5 publication Critical patent/JP2014002591A5/ja
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06KGRAPHICAL DATA READING; PRESENTATION OF DATA; RECORD CARRIERS; HANDLING RECORD CARRIERS
    • G06K15/00Arrangements for producing a permanent visual presentation of the output data, e.g. computer output printers
    • G06K15/02Arrangements for producing a permanent visual presentation of the output data, e.g. computer output printers using printers
    • G06K15/18Conditioning data for presenting it to the physical printing elements
    • G06K15/1801Input data handling means
    • G06K15/1817Buffers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06KGRAPHICAL DATA READING; PRESENTATION OF DATA; RECORD CARRIERS; HANDLING RECORD CARRIERS
    • G06K15/00Arrangements for producing a permanent visual presentation of the output data, e.g. computer output printers
    • G06K15/02Arrangements for producing a permanent visual presentation of the output data, e.g. computer output printers using printers
    • G06K15/18Conditioning data for presenting it to the physical printing elements
    • G06K15/1848Generation of the printable image
    • G06K15/1849Generation of the printable image using an intermediate representation, e.g. a list of graphical primitives
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06KGRAPHICAL DATA READING; PRESENTATION OF DATA; RECORD CARRIERS; HANDLING RECORD CARRIERS
    • G06K15/00Arrangements for producing a permanent visual presentation of the output data, e.g. computer output printers
    • G06K15/02Arrangements for producing a permanent visual presentation of the output data, e.g. computer output printers using printers
    • G06K15/18Conditioning data for presenting it to the physical printing elements
    • G06K15/1848Generation of the printable image
    • G06K15/1856Generation of the printable image characterized by its workflow
    • G06K15/1861Generation of the printable image characterized by its workflow taking account of a limited available memory space or rasterization time
    • G06K15/1863Generation of the printable image characterized by its workflow taking account of a limited available memory space or rasterization time by rasterizing in sub-page segments

Landscapes

  • Engineering & Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Record Information Processing For Printing (AREA)
  • Image Generation (AREA)

Abstract

【課題】 レンダリング対象となる複数のオブジェクトを含む画像データにCPUキャッシュ内に格納出来ないだけのエッジが含まれる場合、CPUキャッシュのキャッシュミスヒットの頻発によりレンダリング処理、特にエッジ処理に時間がかかることがある。
【解決手段】 複数のオブジェクトをレンダリングする際にキャッシュミスヒットが発生しうるかを判定する。そして、キャッシュミスヒットが発生しうると判定された場合に複数のオブジェクトを複数のグループに分類してグループごとにレンダリングを行うことで、複数のオブジェクトに対応するビットマップを生成する。
【選択図】 図6

Description

本発明は、レンダリング処理を実行する画像処理装置、画像処理方法、コンピュータプログラムに関する。
印刷データを主走査方向に1ラインごとに読み込んでレンダリングを行うスキャンラインレンダリングという方法がある(特許文献1参照)。スキャンラインレンダリングは、ページ内に描画する画像オブジェクト(以下オブジェクトと称する)とオブジェクト、またはオブジェクトと背景画像の境目を指すエッジに関する情報(エッジデータ)を基にレンダリングを行う。特許文献1は、スキャンラインレンダリングを行うために、1ライン分のエッジデータをメモリにロードする。
アプリケーションソフトウェアを用いたユーザによって作成される、レンダリング対象となる印刷データは、アプリケーションソフトウェアの描画能力向上に伴い、含まれるエッジ数が多く、複雑なものになってきている。そのためレンダリングシステムのメモリリソースが不足することや、時間がかかることなどが問題になっている。
このような大量エッジの印刷データのレンダリング処理方法として、特許文献2は、処理を行うページ記述言語(PDL)データに含まれるオブジェクトをレベル毎にグループ化して複数個のディスプレイリストを生成するフォールバックと呼ばれる処理を開示する。
特開2000−137825 特開2002−169668
大量エッジを含む印刷データを、特許文献1に開示されるスキャンレンダリング処理によってレンダリングする際、特許文献2の開示するフォールバック処理を実行することで、限られたメモリリソースでのディスプレイリスト生成が可能となる。
しかし、レイヤー毎に生成されたディスプレイリストにCPUキャッシュ内に格納出来ないだけのエッジが含まれる場合、CPUキャッシュのキャッシュミスヒットの頻発によって、レンダリング処理、特にエッジ処理に時間がかかることがある。
本発明の画像処理装置は、複数のオブジェクトをレンダリングする画像処理装置であって、レンダリングする際に用いられるCPUキャッシュと、CPUキャッシュのキャッシュミスヒットが発生しうるかを判定する判定手段と、前記判定手段でキャッシュミスヒットが発生しうると判定される場合、複数のオブジェクトをキャッシュミスヒットしないように複数のグループに分類し、複数のグループに分類されたオブジェクトについて、グループごとに複数のオブジェクトをレンダリングすることで、複数のオブジェクトに対応するビットマップを生成する分割レンダリング処理を実行し、前記判定手段でキャッシュミスヒットが発生しうると判定されない場合、複数のオブジェクトを複数のグループに分類することなくレンダリングすることで、複数のオブジェクトに対応するビットマップを生成するレンダリング手段と、を有することを特徴とする。
オブジェクト数が多くてエッジ数が多い複雑な画像データの場合でも、キャッシュミスヒットしないように複数のオブジェクトをグループに分類してレンダリング処理を行うことにより、レンダリング処理でのキャッシュミスヒットを抑制し、処理時間を減らす。
実施例1のシステム構成例を示す図 実施例1の画像処理装置の構成例を示す図 レンダリング処理の概要を示す図 大量のエッジがディスプレイリストに含まれる場合のエッジ処理の概要を示す図 エッジのレイヤー分割処理を示す図 エッジのレイヤー分割処理の処理フローを示す図 エッジ密集部のレイヤー分割処理を示す図 エッジ密集部のレイヤー分割処理の処理フローを示す図 実施例1のレンダリング処理の処理フローを示す図 実施例1によるエッジのレイヤー分割処理の効果を示す図
以下、本発明を実施するための形態について図面を用いて説明する。
(実施例1)
<システム構成>
図1は本発明の実施形態に係る画像処理システムの構成例を示すブロック図である。このシステムではホストコンピュータ(情報処理装置)130及び2台の画像処理装置100、110がLAN(Local Area Network)140に接続されている。本実施例の画像処理装置100、110は画像形成装置でもあるMFP(Multi Function Peripheral)である。ただし、画像処理装置100、110は、MFPだけに限定されず、SFP(Single Function Printer)であってもよく、また、レーザビームプリンタでもインクジェットプリンタであってもよい。また、画像処理装置のLANへの接続数は、本発明を限定するものではない。また、本実施例では画像処理装置はLANに接続されているが、本発明はこれに限定されない。例えば、公衆回線に代表されるWAN(Wide Area Network)150などの任意のネットワーク、USB(Universal Serial Bus)などのシリアル伝送方式、セントロニクスやSCSI(Small Computer System Interface)などのパラレル伝送方式なども適用可能である。
ホストコンピュータ130はパーソナルコンピュータの機能を有している。このホストコンピュータ130は、LAN140やWAN150を介してFTP(File Transfer Protocol)やSMB(Server Message Block)プロトコルを用いてファイルを送受信したり、電子メールを送受信したりすることができる。さらには、ホストコンピュータ130は、ホストコンピュータ130が有する不図示の記憶部に格納されているプリンタドライバプログラムを、ホストコンピュータの有する不図示のCPU(Central Processing Unit)が実行することで、画像処理装置100、110に対して、印刷を指示することができる。
本実施例の画像処理装置100と110の内部構成は同じであり、スキャナ部を有する画像処理装置である。以下では、説明の簡単のために、画像処理装置100の構成を説明することで、画像処理装置110の構成についての説明を割愛する。
画像処理装置100は、制御部101、操作部102、スキャナ部103、プリンタ部104を有し、LAN140およびWAN150と接続する。
制御部101は、各部と接続し、各部の動作を制御することで画像処理装置100全体の動作制御を司る。また制御部101はLAN140およびWAN150を介して、ホストコンピュータ130や不図示の装置と、画像データなどを送受信する。操作部102は、入力ボタン、タッチパネル兼ディスプレイを有し、印刷設定の情報の入力をユーザから受け付けるユーザインターフェース(UI)である。この操作部102は制御部101からの指示に基づき画像を表示する。ユーザ指示によって入力された印刷設定の情報は制御部101へ送信される。スキャナ部103は、原稿を読み取ることで画像を制御部101に入力する画像入力デバイスである。プリンタ部104は、制御部101が処理した画像データ(ビットマップデータ)を受信して、画像データに基づいた印刷処理を実行する画像出力デバイスである。以下では、画像処理装置100を例にして説明する。
<画像処理装置の構成>
図2は、本実施形態における画像処理装置100の一構成例を示すブロック図である。
CPU205は、画像処理装置100全体を制御するための中央処理装置である。なおCPU205は複数のCPUから構成されていてもよい。RAM(Random Access Memory)206は、CPU205が動作するためのワークメモリであり、入力された画像データを一時記憶するための画像メモリでもある。RAM206はメインメモリとも呼ばれ、以下メインメモリと呼ぶ場合、RAM206のことを指す。さらに、ROM(Read Only Memory)207はブートROMであり、システムのブートプログラムが格納されている。HDD(Hard Disk Drive)208は、各種処理のためのシステムソフトウェアプログラム及び入力された画像データ等を格納する。
なお本実施例のCPU205は、小容量だが高速なメモリアクセスが可能なSRAM(Static Random Access Memory)を用いて構成されるキャッシュメモリ(不図示)と接続する。つまり、キャッシュメモリは、CPU205とメインメモリの間に構成される。またこのキャッシュメモリはメインメモリと接続する。このキャッシュメモリはCPU205がデータや命令などの情報を取得および更新する際に、メインメモリやシステムバスなどの遅延および低帯域を隠蔽化させ、CPU205とメインメモリの性能差を埋める。キャッシュメモリは、CPU205がメインメモリ上のアクセスしたいデータやその
1340080736207_0
、状態、設定など情報を、メインメモリから
1340080736207_1
して保持することで、本来アクセスすべきメインメモリに代わってデータをCPU205に入出力する。なおCPU205が複数のCPUから構成されている場合、それぞれのCPUはそれぞれのキャッシュメモリを有する。
したがって、CPU205は、メインメモリ上のデータを取得する際に、キャッシュメモリに記憶されるデータに関してはキャッシュメモリから取得できるので、データへの高速アクセスが可能となる。一方でキャッシュメモリに記憶されていないデータに関しては、CPU205は、メインメモリから取得することになるので、キャッシュメモリに比べて低速なデータアクセスとなる。本実施例においては、CPU205はメインメモリ上のデータに順次アクセスすると、各データをキャッシュメモリにキャッシュメモリのサイズまでコピーして保持する。なおキャッシュメモリのデータ格納構造や詳細な動作フローについては公知の技術であるため、説明を割愛する。キャッシュメモリのことを以下でCPUキャッシュと呼ぶ。
操作部I/F209は、操作部102とコントローラユニット101とを接続するためのインタフェース部であり、操作部102に操作画面を表示するための画像データを出力する。また、操作部I/F209は、操作部102からユーザが入力した印刷設定等の情報をCPU205に伝える役割をする。
ネットワークインタフェース211は、例えばLANカード等で実現され、LAN140に接続して外部の装置との間で情報の入出力を行う。さらにまた、モデム212はWAN150に接続し、外部の装置との間で情報の入出力を行う。以上のユニットがシステムバス213に接続されるように配置されている。
イメージバスI/F214は、システムバス213と画像データを高速で転送する画像バス215とを接続するためのインタフェース部であり、データ構造を変換するバスブリッジである。画像バス215上には、ラスタイメージプロセッサ216、デバイスI/F217、スキャナ画像処理部218、プリンタ画像処理部219、画像編集用画像処理部220、カラーマネージメントモジュール(CMM)230が接続される。
ラスタイメージプロセッサ(RIP)216は、ページ記述言語コード(PDLデータ)や後述するベクトルデータをビットマップデータに展開する。
デバイスI/F217は、スキャナ部103およびプリンタ部104と制御部101とを接続し、画像データの同期系/非同期系の変換を行う。
また、スキャナ画像処理部218は、スキャナ部103から入力した画像データに対して、補正、加工、編集等の各種処理を行う。プリンタ画像処理部219は、プリンタ部104で印刷する画像データに対して、プリンタ部104のプリンタエンジンに応じた補正、解像度変換等の処理を行う。画像編集用画像処理部220は、画像データの回転や、画像データの圧縮伸長処理等の各種画像処理を行う。CMM230は、画像データに対して、カラープロファイルやキャリブレーションデータに基づいた、色変換処理(色空間変換処理ともいう)を施す専用ハードウェアモジュールである。カラープロファイルとは、機器に依存した色空間で表現したカラー画像データを機器に依存しない色空間(例えばLabなど)に変換するための関数のような情報である。キャリブレーションデータとは、画像処理装置100におけるスキャナ部103やプリンタ部104の色再現特性を修正するためのデータである。
<本実施例における用語の定義>
ここで、以下に説明する本実施例における用語の定義について説明する。
エッジとは、ページ内に描画するオブジェクトとオブジェクト、またはオブジェクトと背景の境目を指す。すなわち画像オブジェクトのアウトラインである。
スパンとは、単一のスキャンラインにおいて、エッジ間で囲まれる閉領域を指す。
レベルとは、ページ内に描画するオブジェクト同士の上下関係を示すもので、各オブジェクトには必ずそれぞれ異なるレベル番号が割り振られている。
フィルとはスパンに対する塗り情報のことで、ビットマップデータやシェーディングのように1ピクセル毎に異なる色値を持つフィルや、ベタ塗りのようにスパン中で色値の変化がないフィルが存在する。
スキャンラインとは、画像形成処理において画像データが連続的にメモリ走査される主走査方向のラインであり、スキャンラインの高さは1ピクセルとなっている。また複数のスキャンラインを束ねたものをバンドと呼ぶ。
レイヤーとは、複数のエッジをレベル昇順にグループ化した1つのグループのことをいう。例えば、レベル番号が1から3001までのエッジが1つずつ存在し、1つのレイヤーに1000エッジ含まれる場合、最背面のレイヤーにはレベル番号が1から1000までのエッジが含まれる。次に一つ上位面のレイヤーにはレベル番号が1001から2000までのエッジが含まれる。更に一つ上位面のレイヤーにはレベル番号が2001から3000までのエッジが含まれる。最上位面のレイヤーにはレベル番号が3001のエッジが含まれる。
<画像形成処理>
次に、図9を使って本実施例の画像処理装置100が実行する画像形成処理について説明する。図9に示される処理フローは制御部101によって実行される。具体的には、制御部101のCPU205が、HDD208に格納されているシステムソフトウェアプログラムをRAM206にロードし、実行することで実行される。
制御部101は、S1003において、PDLデータを受信する。なお本実施例のPDLデータは複数のオブジェクトが含まれる画像データあるものとする。
制御部101は、S1004において、S1003で受信したPDLデータからディスプレイリストを生成し、メインメモリ上のディスプレイリストの記憶領域(DLメモリ)に格納する。この際に制御部101は、1ページ分のディスプレイリストを生成すべく、1ページ分のPDLデータを先頭から解釈して、解釈された描画命令に従ってディスプレイリストを順次生成する。ここで制御部101は、1つあるいは複数のオブジェクトをレンダリングするために用いられる、オブジェクトそれぞれのディスプレイリストを生成するディスプレイリスト生成手段として機能する。レンダリング制御部101は順次ディスプレイリストを生成する際に、逐次DLメモリに格納されるディスプレイリストの総サイズを監視し、総サイズが所定の閾値を超えたかどうかを判定する。総サイズが所定の閾値を超えたと判定された場合、制御部101は、フォールバック処理が実行されると判定し、ディスプレイリストの生成を止めて、フォールバック判定をONとする。そしてS1005へ処理を移行させる。総サイズが所定の閾値以下である場合、制御部101は、フォールバック処理は実行されないと判定し、1ページ分のディスプレイリストを生成し、フォールバック判定をOFFとする。フォールバック処理については<フォールバック処理>で詳述する。ここで制御部101は、フォールバック判定手段として機能する。
制御部101は、S1005において、フォールバック処理が実行されるかどうかをフォールバック判定結果に従って判定する。フォールバック判定がONである場合、処理はS1006へ進む。フォールバック判定がOFFである場合、処理はS1009へ進む。
制御部101は、S1006において、DLメモリに格納されているディスプレイリストに対してエッジレイヤー分割レンダリング処理を行い、ビットマップを生成する。なおエッジレイヤー分割レンダリング処理は単に分割レンダリング処理ともいわれる。
制御部101は、S1007において、フォールバック処理を実行する。フォールバック処理の概要については後述する。このS1007で制御部101は、エッジレイヤー分割レンダリング処理によって生成されたビットマップを背景イメージに対して重ね合わせる、ページ重ね合わせ処理を行う。そして重ね合わせたビットマップに対して、圧縮を施してデータサイズを縮小する。そして、圧縮後のビットマップを背景イメージのディスプレイリストとしてDLメモリに格納する。なお1回目のフォールバック処理では背景イメージはないため、重ね合わせ処理の結果はS1006で生成されたビットマップとなる。
制御部101は、S1009において、DLメモリに格納されているディスプレイリストに対してエッジレイヤー分割レンダリング処理を行い、ビットマップを生成する。
制御部101は、S1011において、入力された全ページ分のPDLデータのレンダリング処理が完了したか否かを判定する。レンダリング処理が完了していなかった場合、次ページのレンダリング処理を行うべくS1004に処理を移行させ、レンダリング処理が完了していた場合、処理を終了させる。なお本フローの後段の処理として、レンダリングされたビットマップ画像に対して画像処理が施され、プリンタ部104に送信されて印刷される。
<フォールバック処理>
フォールバックとは背景技術でも述べた処理のことである。フォールバック処理は、PDLデータからディスプレイリストを生成する際に実行されうる処理である。PDLデータからディスプレイリストを生成する際、入力されたPDLデータサイズが大き過ぎると、全てのディスプレイリストを格納する為のDLメモリの容量が不足する場合がある。
この場合、制御部101はまず、DLメモリに収まるサイズのディスプレイリストを複数のオブジェクト一部に対応するPDLデータから生成し、生成されたディスプレイリストに対してレンダリング処理を実行してビットマップを生成する。そして、制御部101は、このビットマップを生成するために用いられたディスプレイリストをDLメモリから削除する。そして制御部101は、生成したビットマップをJPEG圧縮など非可逆圧縮してデータサイズを小さくし、圧縮後のビットマップを背景イメージのディスプレイリストとして、再びDLメモリに格納する。そして制御部101は、ビットマップの圧縮によるDLメモリの空き容量に、残りのPDLデータから生成されるディスプレイリストを格納する。
そして制御部101は、DLメモリに格納された、既にレンダリングされた背景イメージとしてのビットマップに、PDLデータから新たに生成されたディスプレイリストをレンダリングすることで得られたビットマップを重ね合わせる。制御部101は、このビットマップの重ね合わせ処理によって最終的にプリンタ部104へ送るべきビットマップを得る。
以上の処理がフォールバック処理である。このフォールバック処理が行われるかどうかは、制御部101が、DLメモリに格納されているディスプレイリストの総量が、所定の閾値を超えるかどうかによって判定されている。
またS1007で行われるフォールバック処理における重ね合わせ処理について説明する。フォールバック処理おけるビットマップの重ね合わせ処理における背景イメージは、既にレンダリング処理により生成された1ページ分の大きさのビットマップである。背景イメージは圧縮されており、この背景イメージのディスプレイリストはDLメモリに格納されている。制御部101は、レンダリング処理において背景イメージが存在している場合、この圧縮背景イメージを展開して、処理対象となっているディスプレイリストのレンダリング時に重ね合わせ処理を行う。すなわち、フォールバック処理を行うと、圧縮された画像データを展開した画像データが重ね合わせに用いられる。一方、後述の図6のS714や図8のS916において実行される画像データの重ね合わせ処理は、圧縮のない上位および下位のレイヤーのレンダリング後の画像データの重ね合わせである。すなわちS714およびS916において実行される画像データの重ね合わせ処理は、圧縮された画像データの重ね合わせではない点で、フォールバック処理によって実行される画像データの重ね合わせとは異なる。
<ディスプレイリストのレンダリング処理方法について>
図3は、スキャンラインレンダリングと呼ばれるレンダリング処理方法について説明した図である。以下の処理は制御部101によって実行される。具体的には、制御部101のCPU205が、HDD208に格納されているスキャンラインレンダリングのプログラムをRAM206にロードし、実行することで実行される。
図3(a)は、本実施例のスキャンラインレンダリング処理の処理フローについて説明するブロック図である。スキャンラインレンダリング処理は大きく分けて、エッジ処理、レベル処理、フィル処理、コンポジット処理の4つに分かれている。以下に各処理の詳細を記載する。なおCPU205が複数のCPUで構成されている場合、それぞれのCPUに別々の処理を実行させてもよい。具体的には1つ目のCPUはエッジ処理だけを実行し、2つ目のCPUはレベル処理だけを実行し、3つ目のCPUはフィル処理だけを実行し、4つ目のCPUはコンポジット処理だけを実行する。
<エッジ処理>
エッジ処理は大きく分けて5つの処理からなっている。
エッジロードとはDLメモリに格納されているディスプレイリストから、オブジェクトのアウトラインを示すエッジデータをメインメモリ上へロードする処理(エッジロード処理)のことをいう。なおエッジロード処理は後述のエッジデータをリンクリストとして管理すべく、エッジリストにロードする処理とも言い換えることができる。
ロードされたエッジデータに対して、スキャンラインごとにエッジの傾きや塗りルールを元に、エッジの位置を示すX座標を算出するX座標算出処理が行われる。
処理中のスキャンラインに現れるエッジは、ActiveEdgeList(AEL)と呼ばれるリンクリスト(エッジリスト)によって、スキャンラインごとにエッジリストの先頭からエッジのX座標昇順でソートされている。N番目のスキャンラインでのエッジリストに含まれるエッジデータは、直前のスキャンラインであるN−1番目のスキャンラインでのエッジリストを用いてソートされる。
具体的には、N番目のスキャンラインのエッジリストにおいてエッジデータが、それぞれのX座標に従ってエッジE1、E2、E3の順でソートされていると仮定する。そして、スキャンラインが変わった際に、N+1番目のスキャンライン上のエッジE1、E2、E3のX座標をX座標算出処理によって求める。そしてN番目のスキャンラインのエッジリストおよび求められたX座標に従ってエッジE1〜E3のソートを実行する。
ここではN番目のスキャンラインのエッジリストはエッジE1、E2、E3の順なので、まず、エッジE3のX座標を、N番目のスキャンラインのエッジリストにおいて1つ前のエッジE2のX座標と比較する。これによって、N+1番目のスキャンラインのエッジリストにおいて、エッジE3がエッジE2よりも前にあるかどうかを判定する。エッジE3がエッジE2より前にある場合にエッジE3のX座標はN番目のスキャンラインのエッジリストにおいてさらに前のエッジE1のX座標と比較される。これにより、N+1番目のスキャンラインのエッジリストにおいてエッジE3がエッジE1よりも前にあるかどうかが判定される。
そして、これらの比較判定の結果に従ってN+1番目のスキャンラインのエッジリストにおけるエッジE3の順番が決定され、決定された順番となるようにエッジリストのリンク構造を更新する。この処理はそれぞれのエッジに対しても実行され、N+1番目のスキャンラインのエッジリストが更新される。
なおエッジのX座標どうしの比較が行われる際に、エッジデータがCPUキャッシュ上になければメインメモリ上のエッジデータにアクセスする必要がある。しかしエッジデータがCPUキャッシュ上にあれば、エッジデータがCPUキャッシュにコピーされている場合には、メインメモリではなくCPUキャッシュ上のエッジデータにアクセスすることで処理が高速化される。このような動作はCPUキャッシュと接続するCPU205の動作として一般的である。
以上説明したようにスキャンラインが変わってエッジのX座標の前後が逆転した場合、または新たにエッジが出現/消滅した場合などに、エッジリストのリンク構造を更新する必要がありこれをエッジソートと呼んでいる。
エッジソートが終わったエッジリストはレベル処理部に渡されて、X座標昇順でのエッジデータおよびレベルデータがレベル処理部に渡される。これをエッジトラッキングと呼んでいる。
最後に描画が終了したエッジはエッジ削除処理される。
<レベル処理>
次にレベル処理は大きく分けて3つの処理からなっている。
レベルの追加とはエッジ処理から送られてきたエッジデータに含まれるエッジの向きやクリップ情報を元に、エッジが描画対象のエッジであるか否かを判定する。エッジが描画対象だった場合、ActiveLevelList(ALL)と呼ばれるリンクリストに該当するエッジデータが追加される。
また、レベルの削除処理はレベルの追加処理と逆で、エッジの向きやクリップ情報を元にそれまで描画対象だったエッジが描画対象でなくなった場合、ALLから削除される処理のことを言う。
ALLはレベル番号昇順に常にソートされており、レベルの追加や削除があった場合、レベルソートと呼ばれるALLのソート処理が行われる。これらの処理を行ったレベルデータはスパン単位でフィル処理に渡される。
<フィル処理>
次にフィル処理は大きく分けて3つの処理からなっている。
画像拡縮はディスプレイリストに含まれているビットマップ画像に拡大率が指定されていた場合、指定に応じてフィルを生成する処理をいう。
画像回転はディスプレイリストに含まれているビットマップ画像に回転情報が指定されていた場合、指定に応じてフィルを生成する処理をいう。
ピクセル生成はディスプレイリストにある色値とある色値と変化情報が指定されていた場合、指定に応じてフィルを生成する処理をいう。
<コンポジット処理>
最後にコンポジット処理は大きく分けて1つの処理からなっている。コンポジット処理はレベル処理で確定したレベルの上下関係とフィル処理で生成したピクセルを元に、ディスプレイリストに指定されている重ね合わせ処理を行うことをいう。
上記で記載した各処理はスパンを単位としてパイプラインで並列に処理される。これについて図3(b)、(c)を用いて説明する。
図3(b)は、1枚のページ画像データを示す。オブジェクト403が最下位のレベルを有するオブジェクトであり、その上位にオブジェクト402が重なり、さらにその上にオブジェクト401が重なっている。これら3つのオブジェクトはすでにディスプレイリスト化されている。このようなページ画像データに対してスキャンラインごとにスキャンラインレンダリング処理を行う。
詳細に図3(b)を説明すると、ページ画像データの1スキャンライン目は、オブジェクトが存在しないのでスパン1−1が処理される。2スキャンライン目は、オブジェクト402が存在し、2つのエッジが検出されるので、スパン2−1、2−2、2−3が処理される。3スキャンライン目は、オブジェクト401、402、403が存在し、6つのエッジが検出されるので、スパン3−1、3−2、3−3、3−4、3−5、3−6、3−7が処理される。4スキャンライン目以降も同様である。
このように各スキャンラインのスパンは図3(c)に示されるように、エッジ処理、レベル処理、フィル処理、コンポジット処理の順でパイプライン処理される。
図3(b)の例で言うと、図3(c)に示されるように、まず1スキャンライン目の1番目のスパン1−1がエッジ処理で処理され、続いてレベル処理に渡される。次に2スキャンライン目の1番目のスパン2−1がエッジ処理され、レベル処理に渡されるのと同じ時にスパン1−1がレベル処理され、フィル処理に渡される。以下同様に図3(c)で示すように各スパンが各処理で並列に処理される。
<大量エッジが含まれているディスプレイリストのエッジ処理方法について>
図3ではオブジェクト401、402、403が1つずつだった場合のレンダリング処理について説明した。ここではオブジェクト402、403がそれぞれ1000個ずつ重なった場合の、エッジ処理におけるエッジソートで行われる処理について図4を用いて説明する。 図4(a)は、見た目上、図3(b)と同じ画像を示す画像データである。しかし図4(a)は、1000個のオブジェクト402が同じ位置に重なっており、また1000個のオブジェクト403が同じ位置に重なっている。
図4(a)のスパン3−2付近の破線で表される円のオブジェクトの配置を拡大した図が図4(b)となる。図4(b)では縦線で表された部分がオブジェクト401の領域である。また、X0は、4スキャンライン目のオブジェクト401のエッジのX座標である。X1は、オブジェクト402のエッジのX座標である。X2は、オブジェクト403のエッジのX座標である。X3は、3スキャンライン目のオブジェクト401のエッジのX座標である。すなわち、3スキャンライン目から4スキャンライン目へと、スキャンラインが変わると、オブジェクト401のエッジが1000個のオブジェクト402および403を横切ることになる。したがって、図4(c)に示されるように、エッジソート処理によって、3スキャンライン目のエッジリスト上のオブジェクト401のエッジデータは、1000個のオブジェクト402のエッジデータおよび1000個のオブジェクト403のエッジデータを辿る。そして、4スキャンライン目のエッジリストのように、エッジリストの先頭へオブジェクト401のエッジデータが移される。
つまり、図4(c)では、前述したように、処理中に現れるエッジデータはAELとしてX座標昇順でリンクされている。3スキャンライン目ではオブジェクト402の左側のエッジが1000個分リンクで繋がっており、次にオブジェクト403の左側のエッジが1000個分リンクで繋がっており、最後にオブジェクト401の左側のエッジがリンクされている。
3スキャンライン目から4スキャンライン目に移る際、オブジェクト401の左側のエッジはX座標がX3からXに変化するので、エッジソート処理で、オブジェクト402および403の左側のエッジをそれぞれ1000個ずつを辿って所定の位置にリンクされることになる。
リンクを辿る際は、メインメモリ上のエッジデータに順次アクセスして、各エッジのX座標とソート対象エッジのX座標と比較する。エッジ数が少ない場合は、エッジデータへのアクセスの際、全スキャンラインを通して1回以上アクセスされるエッジデータの全てがCPUキャッシュに格納された状態となるので高速に処理できる。
しかし、図4で示した例のようにエッジリストに含まれるエッジデータ数が大量だった場合、全てのエッジデータはCPUキャッシュに収まりきらない。そのため、CPUキャッシュに存在しないエッジデータへのアクセスのために、メインメモリに直接アクセスしなければならず、処理時間が極端に遅くなることがある。特にこの例で挙げたように局所的にエッジが密集した場合(例えばオブジェクト402のエッジのX座標近傍に2000エッジが集中する場合)、少しのエッジの移動でも大量のエッジにアクセスしてエッジソートを行わなければならず処理時間が極端に遅くなる原因となっている。
<エッジのレイヤー分割処理>
次に、図5を用いて本実施例におけるエッジのレイヤー分割処理について説明する。ここでは、<大量エッジが含まれているディスプレイリストのエッジ処理方法について>で記載したように、オブジェクト402、403がそれぞれ1000個ずつ同一箇所に重なっている場合を元に説明する。
入力されたディスプレイリストに含まれるオブジェクトはレベル番号が1から1000が振られたオブジェクト403が1000個、レベル番号が1001から2000が振られたオブジェクト402が1000個、レベル番号2001が振られたオブジェクト401が1個である。一つのオブジェクトには左側のエッジと右側のエッジの2つからなっており、このディスプレイリストの場合、2001個のオブジェクトなのでエッジデータ数は4002個になる。
ここでCPUキャッシュのメモリサイズが、2000エッジ分のエッジデータまではCPUキャッシュ内に保持でき、それ以上の場合CPUキャッシュから溢れてしまうとする。その場合1つのレイヤーには1000個のオブジェクト(2000個のエッジデータ)まで含まれるようにすればよいことになる。このエッジデータ数はCPUキャッシュのメモリサイズおよびエッジデータのデータサイズによって異なるので、画像処理装置100が異なればCPUキャッシュに保持できるエッジデータ数も異なることになる。
まず、制御部101は、入力されたディスプレイリストに含まれるオブジェクトのエッジとそのレベル番号を確認し、各々のエッジデータがどのレイヤーに属するべきか判定する。この場合レベル番号が1から1000の1000個のオブジェクト403がレイヤー1に、レベル番号が1001から2000の1000個のオブジェクト402がレイヤー2に、オブジェクト401がレイヤー3に属することになる。
各レイヤーに対して生成されることになるビットマップは、背面のレイヤーから重ね合わせる必要があるので必ずレイヤー1から順番にレンダリングしていく必要がある。しかし、各レイヤー内のオブジェクトに関してはレベル処理が行われるのでレベル番号の小さい順に処理する必要はなくエッジが現れる順に処理すればよい。
各レイヤーでの処理は<ディスプレイリストのレンダリング処理方法について>に記載したレンダリング処理方法を行うが、ディスプレイリストを解釈する際、処理中のレイヤーに属するエッジデータのみをメインメモリにロードして処理を行う点が特徴の一つである。
図5の1レイヤー目ページ画像の生成で示すように1レイヤー目のレンダリング処理によってビットマップ画像が生成された後(図5上段)に、2レイヤー目の処理に取り掛かる。2レイヤー目も1レイヤー目と同様、2レイヤー目に属するエッジのみをメインメモリにロードしてレンダリング処理を行い、2レイヤー目のビットマップ画像を生成する。その後1レイヤー目のビットマップ画像と2レイヤー目のビットマップ画像の重ね合わせを行い、1レイヤー目と2レイヤー目のビットマップ画像が重ねあわされた画像が生成される(図5中段)。以下同様に最上位レイヤーまでレンダリング処理と重ね合わせ処理を繰り返す。
<エッジのレイヤー分割処理フロー>
次に、図6を用いて本実施例におけるステップS1006、S1009のエッジレイヤー分割レンダリング処理をフローチャートで説明する。
S703において制御部101は、レンダリング処理を行う1ページ分のディスプレイリストとこのディスプレイリストに含まれるエッジデータ数(エッジ数)を受信し、エッジデータをメインメモリに格納する。
S704において制御部101は、CPUキャッシュのメモリサイズと1つのエッジデータのデータサイズ(単位データサイズともいう)に基づいて、エッジ処理においてキャッシュミスヒットが発生しにくいエッジ数を算出する。算出方法は下記<エッジ数算出方法>に記載する。そして制御部101は、算出したエッジ数をS705での判定処理で用いる基準値に設定する。なお、基準値として設定される値は、これだけに限定されず、算出したエッジ数に係数r(0<r<1)を乗じた値でも、キャッシュミスヒットが生じないことが予想される所定の値でもよい。
S705において制御部101は、S703で受信したディスプレイリストに含まれるエッジ数とS704で設定した基準値とを比較判定する。すなわちS705において制御部101は、スキャンラインレンダリング特にエッジソート処理において、画像データに含まれる1つ以上のオブジェクトをレンダリング処理する際にキャッシュミスヒットが発生しうるかを判定する。またこれを言い換えれば、制御部101は、スキャンラインレンダリング特にエッジソート処理において、画像データに含まれる1つ以上のオブジェクトをレンダリング処理する際にキャッシュミスヒットが発生しうる頻度あるいは回数あるいは可能性を判定する。
S703で受信したディスプレイリストに含まれるエッジ数がS704で設定した基準値未満である場合に、制御部101は、レンダリングにおいてCPUキャッシュのキャッシュミスヒットが発生しうると判定しない。そしてS717において制御部101は、<ディスプレイリストのレンダリング処理方法について>で図3を用いて説明したキャッシュミスヒットを考慮しない通常のレンダリング処理を行って、画像データに含まれる1つ以上のオブジェクトに対応するビットマップを生成する。そしてS718において処理を終了させる。
S703で受信したディスプレイリストに含まれるエッジ数がS704で設定した基準値以上である場合に、制御部101は、レンダリングにおいてCPUキャッシュのキャッシュミスヒットが発生しうると判定する。そしてS706において制御部101は、レベル番号ごとにエッジデータを管理する。
S707において制御部101は、ディスプレイリストに含まれるそれぞれのエッジデータに対して、どのレイヤーに属するかを分類する。これはレベル番号ごとにエッジデータがS706において管理されているので、ディスプレイリストに含まれるエッジデータを、下位のレベルからS704で設定した基準値(例えばS704で算出したエッジ数)ごとにレイヤー分類することで行う。ただし基準値ごとにレイヤー分類することは一例であって、基準値の半分の値ごとにレイヤー分類しても良い。すなわち、エッジデータのレイヤー分類は、スキャンラインレンダリング特にエッジソート処理において、CPUキャッシュのキャッシュミスヒットが発生する頻度、回数、確率をより低減させる単位ごとに行われる。なお、エッジデータのレイヤー分類の処理は、言い換えると、複数のオブジェクトを下位レベルから順に複数のグループに分類する処理である。制御部101は、この処理の結果、各エッジデータがどのレイヤーに分類されるかを管理する。なおこの時点で制御部101は、処理対処のレイヤーは最下位のレイヤーとしている。
S708において制御部101は、ディスプレイリストを解釈する。
S709において制御部101は、解釈したディスプレイリスト内に含まれるエッジデータのうちの、処理対象のレイヤーに属するエッジデータを判定する。
S710において制御部101は、S709で判定されたエッジデータをメインメモリにロードする。
S711において制御部101は、<ディスプレイリストのレンダリング処理方法について>に記載したエッジ処理を行う。すなわち、DLメモリに含まれるディスプレイリストに含まれるエッジデータのうち、エッジ処理のエッジソートにおいてキャッシュミスヒットが発生しない分だけのエッジデータに対して、スキャンレンダリング処理を行う。
S712において制御部101は、<ディスプレイリストのレンダリング処理方法について>に記載したレベル処理、フィル処理、コンポジット処理をパイプライン処理で行い処理対象のレイヤーのビットマップページ画像を生成する。
S714において制御部101は、S708からS712で生成された、処理対象のレイヤーのビットマップページ画像を、既にレンダリングされている背景レイヤー(下位レイヤー)のビットマップページ画像に重ね合わせる処理を行う。
S715において制御部101は、処理対象のディスプレイリストに含まれる全てのレイヤーのレンダリング処理が完了したか否かを判定し、レンダリング処理が完了していたら処理を終了させる。一方、全てのレイヤーのレンダリング処理が完了していなかった場合、処理対象のレイヤーを1つ上位のレイヤーとして、処理をS708に進める。
以上がエッジレイヤー分割レンダリング処理についての説明である。ここで重要なのは、エッジレイヤー分割レンダリング処理とは、キャッシュミスヒットを抑制するために複数のオブジェクトをグループに分類してグループごとにスキャンラインレンダリングを行う処理であるということである。
<エッジ算出方法>
ここで、キャッシュミスヒットが発生しないエッジデータ数の算出方法を説明する。例えば、CPUキャッシュのメモリサイズが128Kbyteで、1つのエッジデータのデータサイズが64byteだった場合、CPUキャッシュのメモリサイズを1つのエッジデータのデータサイズで割った値である2048(個)がキャッシュミスヒットが発生しないエッジデータ数となる。
<効果>
図10(a)は、本実施例のエッジレイヤー分割レンダリングを実施しなかった場合のエッジ数とエッジソートにかかる処理時間の関係を示した図である。図10(a)は、エッジソート処理を、CPUキャッシュのメモリサイズを考慮しないで行うため、エッジ数が大量にあるディスプレイリストを処理する際にキャッシュミスヒットが頻発し、処理時間が飛躍的に増大していることを示す。一方、図10(b)は、本実施例のエッジレイヤー分割レンダリングを実施した場合のエッジ数とエッジソートにかかる処理時間の関係を示した図である。図10(b)は、エッジソート処理を、CPUキャッシュのメモリサイズを考慮して行うため、エッジ数が大量にあるディスプレイリストを処理する際でも、キャッシュミスヒットの発生を抑制することを示す。そのため、エッジ数の増大とエッジソート処理にかかる時間の関係をほぼ線形に保つことができる。
以上説明した本実施例のエッジレイヤー分割レンダリング処理は、CPUキャッシュのメモリサイズを考慮して、一度にスキャンレンダリング処理を行うディスプレイリストのグループをレイヤーとして決める。そしてレイヤーごとにスキャンラインレンダリング処理を行ってレイヤーごとのビットマップページ画像を生成して重ね合わせる。そのため、スキャンレンダリング処理(特にエッジソート処理)において発生するキャッシュミスヒットを抑制でき、高速にレンダリング処理を実行することができる。
なお本実施例ではS703およびS704で求めたエッジ数と基準値とを比較することで、制御部101はS705の判定処理を行った。本発明はこれだけに限定されない。エッジソート処理において発生しうるキャッシュミスヒットの原因は、エッジソートされるエッジデータがCPUキャッシュに収まりきらないことにある。そこでS705の判定処理を、レンダリング対象の複数のオブジェクトのエッジデータのデータサイズに関わる情報に基づいて行えばよい。つまりレンダリング対象の複数のオブジェクトのエッジデータのデータサイズに関わる情報(判定情報ともいう)とキャッシュミスヒットの発生を予想するための基準値との比較によって、S705の判定処理を行えばよい。言い換えれば、S705の判定処理は、キャッシュミスヒットの発生の頻度や回数や確率に関与する、画像データに含まれる複数のオブジェクトの情報と基準値との比較結果に基づいて行われる。キャッシュミスヒットの発生の頻度や回数や確率に関与する、画像データに含まれる複数のオブジェクトの情報の本実施例の他の例としては、画像データに含まれるオブジェクト数や複数のオブジェクトのエッジデータのデータサイズの情報などがある。
例えば、制御部101は、オブジェクト数が基準値を超えた場合にキャッシュミスヒットが発生しうると判定する。また例えば1つのエッジデータのデータサイズが可変であれば制御部101は実際に複数のオブジェクトのエッジデータのデータサイズを求める。そして制御部101は、このデータサイズが基準値(例えばCPUキャッシュのメモリサイズ)を超えた場合にキャッシュミスヒットが発生しうると判定する。基準値はそれぞれの判定方法に適した所定の閾値である。
(実施例2)
実施例1では、ページ画像データ全体に対して、エッジレイヤー分割レンダリング処理を実施した画像処理装置100を説明した。本実施例の画像処理装置100は、ページ画像データをエッジが密集しているバンド領域(単にバンドとも呼ぶ)とそうではないバンド領域とに分割して、エッジ密集部のバンドのみに対してエッジレイヤー分割レンダリング処理を実施する。また、本実施例の画像処理装置100は、エッジ密集部以外のバンドに対して図3で説明した、キャッシュミスヒットを特別に考慮しない通常のスキャンラインレンダリング処理を実施する。
すなわち、エッジが密集していない部分に対してはビットマップ画像の重ね合わせ処理を行わずに通常のスキャンラインレンダリング処理を行う。したがって部分的なバンドの画像の重ね合わせを行うことで、ビットマップページ画像の重ね合わせを行うよりも処理を高速にすることができる。
以下で説明する本実施例は、実施例1の画像処理装置100で実施され、とくに説明がない限り、実施例1の画像処理装置と構成は同様である。
<エッジ密集部のみのレイヤー分割処理>
図7を用いてエッジ密集部のみのレイヤー分割処理の概要について説明する。
実施例1の<エッジのレイヤー分割処理>では全面領域に対してレイヤー分割を行い、各レイヤーでスキャンレンダリング処理と重ね合わせを行っていたが、エッジが密集していない領域に関しても重ね合わせ処理が発生している。本説明も実施例1の<エッジのレイヤー分割処理>と同様<大量エッジが含まれているディスプレイリストのエッジ処理方法について>で記載したように、オブジェクト402、403がそれぞれ1000個ずつ同一箇所に重なっている場合を元に説明する。
入力ディスプレイリストに含まれるエッジの個数のみでなく、エッジがロードされる位置情報とエッジの高さ情報からエッジが密集しているバンドを特定する。実施例1の<エッジのレイヤー分割処理>ではレイヤー毎にディスプレイリストの先頭から解釈するのを繰り返していたが、この場合エッジが密集しないと判定されたバンド(図の1スキャンライン目)はレイヤーに関係なく全スパンのスキャンレンダリング処理を行う。次に2〜5スキャンライン目のエッジが密集していると判定されたバンド(密集バンド801)を処理する際は、まずレイヤー1に属するエッジデータを用いてスキャンレンダリング処理を行い、レイヤー2に属するエッジデータを用いてスキャンレンダリングを行う。そしてレイヤー1の密集バンド801とレイヤー2の密集バンド801のビットマップ画像の重ね合わせ処理を行う。上記処理を最上位レイヤーまで繰り返す。最後に6スキャンライン目以降はエッジが密集しないと判定されたバンドなので、レイヤーに関係なく、このバンドに対応する全エッジデータを用いてスキャンレンダリング処理を行う。
すなわち、密集バンド801のみに対して、実施例1のエッジレイヤー分割レンダリング処理と同様の処理を行う。この処理を行うことにより、レイヤー分割が必要なバンドのみの重ね合わせ処理になるのでより高速にレンダリング処理を行うことが可能になる。
<エッジ密集部のみのレイヤー分割処理フロー>
次に、図8を用いて本実施例におけるエッジのレイヤー分割処理をフローチャートで説明する。図8を用いて説明する以下の処理で、実施例1で説明した図9のS1006、S1009の処理を置き換えた処理を本実施例の画像処理装置100は実行する。
S903において制御部101は、レンダリングを行うディスプレイリストとディスプレイリストに含まれるエッジデータ数(エッジ数)、エッジのロード位置、エッジの高さを受信し、メインメモリに格納する。なおエッジのロード位置とは、そのエッジが何スキャンライン目で現れることになるかという情報である。またエッジの高さとは、そのエッジがエッジロード位置で現れてから何スキャンライン分存在するかを示す情報である。
S904は、S704と同様の処理である。
S905は、S705と同様の処理である。
S906は、S706と同様の処理である。
S907は、S706と同様の処理である。
S908において制御部101は、S903で取得したディスプレイリストのエッジのロード位置およびエッジの高さに基づいてエッジ密集バンドを特定する。エッジ密集バンドの特定方法については<エッジ密集バンド特定方法>で詳述する。なおここで制御部101は、処理対象のバンドとしてページ画像の先頭バンドを設定し、処理対象のレイヤーとして最下位のレイヤーを設定する。
S909は、S708と同様の処理である。
S910において制御部101は、処理対象のバンドがS908で特定されたエッジ密集バンドか否かを判定する。
S910において処理対象のバンドがエッジ密集バンドであると判定された場合、S911において制御部101は、処理対象のバンドにおいて、解釈したディスプレイリスト内に含まれるエッジデータのうちの、処理対象のレイヤーに属するエッジデータを判定する。
S912において制御部101は、S911で判定されたエッジデータをメインメモリにロードする。
S913において制御部101は、実施例1の<ディスプレイリストのレンダリング処理方法について>に記載したエッジ処理を行う。
S914において制御部101は、実施例1の<ディスプレイリストのレンダリング処理方法について>に記載したレベル、フィル、コンポジット処理を行い、処理対象のバンドにおける処理対象のレイヤーのビットマップ画像を生成する。
S915において制御部101は、処理対象のバンドにおいて、S914で生成したビットマップ画像と既にレンダリングされている下位のレイヤーのビットマップ画像との重ね合わせ処理を行う。
S916において制御部101は、処理対象のバンドにおいて、処理中のディスプレイリストに含まれる全てのレイヤーのレンダリング処理が終了したか否かを判定し、レンダリング処理が終わっていたらS921に処理を移行する。終わっていなかったら処理対象のレイヤーを1つ上位のレイヤーにして、S909に処理を移行する。
S910において制御部101は、処理対象のバンドがエッジ密集バンドでないと判定した場合、S917において制御部101は、処理対象のバンドのエッジデータをメインメモリにロードする。
S918において制御部101は、実施例1の<ディスプレイリストのレンダリング処理方法について>に記載したエッジ処理を行う。
S919において制御部101は、実施例1の<ディスプレイリストのレンダリング処理方法について>に記載したレベル、フィル、コンポジット処理を行い処理中のレイヤーのページを生成する。
S920において制御部101は、全バンドのディスプレイリストの解釈が終了したか否かを判定し終わっていたら処理を終了する。終わっていなかったら処理対象のバンドを隣接する未処理のバンドにして、S909に処理を移行する。
<エッジ密集バンド特定方法>
ここでS908のエッジ密集バンド特定方法を説明する。まず制御部101は、任意のバンド高さを決定する。高さの例としては32ラインや64ラインがある。次に制御部101は、ディスプレイリストに含まれるエッジの現れるライン位置とエッジの高さから、各バンドに含まれるエッジの個数をバンド毎に集計する。例えば、あるエッジが1スキャンライン目に現れ、高さが128、バンド高さが32だった場合、1バンド目から4バンド目にエッジが現れていることになる。この計算を制御部101は、各エッジに対して行い各バンドに含まれるエッジ数を算出し、算出されたエッジ数が所定のエッジ数(例えばS904で算出したエッジ数)を超えたバンドを、エッジ密集バンドとして特定する。
以上説明したように、本実施例では、画像データを複数のバンドに分割して、各バンドに対してエッジレイヤー分割レンダリング処理か通常のレンダリング処理のどちらを行うかを判定する。そして判定結果にしたがってそれぞれのバンドがそれぞれのバンドに設定されたレンダリング方法でレンダリング処理される。つまり、実施例1ではページ画像単位でエッジレイヤー分割レンダリング処理を行うか通常のレンダリング処理を行うかが判定されて各レンダリングが実行された。一方、本実施例では、バンド領域単位でエッジレイヤー分割レンダリング処理を行うか通常のレンダリング処理を行うかが判定されて各レンダリングが実行される。
これにより、エッジが密集していない部分に対してはビットマップ画像の重ね合わせ処理を行わずに通常のスキャンラインレンダリング処理を行う。したがって部分的なバンドの画像の重ね合わせを行うことで、ビットマップページ画像の重ね合わせを行うよりも処理を高速にすることができる。その一方でエッジが密集している部分に対してはキャッシュミスヒットの発生を抑制しながら高速にレンダリング処理を行ってビットマップを生成する。以上によりページ画像に対するレンダリング処理を高速化する。
(その他の実施例)
以上、様々な実施形態を詳述したが、本発明は、複数の機器から構成されるシステムに適用してもよいし、また、一つの機器からなる装置に適用してもよい。例えば、スキャナ、プリンタ、ホストコンピュータ、複写機、複合機及びファクシミリ装置の如くである。
本発明は、前述した実施形態の各機能を実現するソフトウェアプログラムを、システム若しくは装置に対して直接または遠隔から供給し、そのシステム等に含まれるコンピュータが該供給されたプログラムコードを読み出して実行することによっても達成される。
従って、本発明の機能・処理をコンピュータで実現するために、該コンピュータにインストールされるプログラムコード自体も本発明を実現するものである。つまり、上記機能・処理を実現するためのコンピュータプログラム自体も本発明の一つである。
その場合、プログラムの機能を有していれば、オブジェクトコード、インタプリタにより実行されるプログラム、OSに供給するスクリプトデータ等、プログラムの形態を問わない。
プログラムを供給するための記録媒体としては、例えば、フレキシブルディスク、ハードディスク、光ディスク、光磁気ディスク、MO、CD−ROM、CD−R、CD−RWなどがある。また、記録媒体としては、磁気テープ、不揮発性のメモリカード、ROM、DVD(DVD−ROM、DVD−R)などもある。
また、プログラムは、クライアントコンピュータのブラウザを用いてインターネット/イントラネットのウェブサイトからダウンロードしてもよい。すなわち、該ウェブサイトから本発明のコンピュータプログラムそのもの、もしくは圧縮され自動インストール機能を含むファイルをハードディスク等の記録媒体にダウンロードしてもよいのである。また、本発明のプログラムを構成するプログラムコードを複数のファイルに分割し、それぞれのファイルを異なるウェブサイトからダウンロードすることによっても実現可能である。つまり、本発明の機能処理をコンピュータで実現するためのプログラムファイルを複数のユーザに対してダウンロードさせるWWWサーバも、本発明の構成要件となる場合がある。
また、本発明のプログラムを暗号化してCD−ROM等の記憶媒体に格納してユーザに配布してもよい。この場合、所定条件をクリアしたユーザにのみ、インターネット/イントラネットを介してウェブサイトから暗号化を解く鍵情報をダウンロードさせ、その鍵情報で暗号化されたプログラムを復号して実行し、プログラムをコンピュータにインストールしてもよい。
また、コンピュータが、読み出したプログラムを実行することによって、前述した実施形態の機能が実現されてもよい。なお、そのプログラムの指示に基づき、コンピュータ上で稼動しているOSなどが、実際の処理の一部または全部を行ってもよい。もちろん、この場合も、前述した実施形態の機能が実現され得る。
さらに、記録媒体から読み出されたプログラムが、コンピュータに挿入された機能拡張ボードやコンピュータに接続された機能拡張ユニットに備わるメモリに書き込まれてもよい。そのプログラムの指示に基づき、その機能拡張ボードや機能拡張ユニットに備わるCPUなどが実際の処理の一部または全部を行ってもよい。このようにして、前述した実施形態の機能が実現されることもある。

Claims (12)

  1. 複数のオブジェクトをレンダリングする画像処理装置であって、
    レンダリングする際に用いられるCPUキャッシュと、
    CPUキャッシュのキャッシュミスヒットが発生しうるかを判定する判定手段と、
    前記判定手段でキャッシュミスヒットが発生しうると判定される場合、複数のオブジェクトをキャッシュミスヒットしないように複数のグループに分類し、複数のグループに分類されたオブジェクトについて、グループごとに複数のオブジェクトをレンダリングすることで、複数のオブジェクトに対応するビットマップを生成する分割レンダリング処理を実行し、
    前記判定手段でキャッシュミスヒットが発生しうると判定されない場合、複数のオブジェクトを複数のグループに分類することなくレンダリングすることで、複数のオブジェクトに対応するビットマップを生成するレンダリング手段と、
    を有することを特徴とする画像処理装置。
  2. 前記レンダリングは、スキャンラインごとに複数のオブジェクトのエッジデータをソートするエッジソート処理を含むスキャンラインレンダリングであり、
    前記判定手段は、前記エッジソート処理においてCPUキャッシュのキャッシュミスヒットが発生しうるかを判定することで、レンダリングにおいてCPUキャッシュのキャッシュミスヒットが発生しうるかを判定することを特徴とする請求項1に記載の画像処理装置。
  3. 前記スキャンラインレンダリングでは、前記エッジソート処理の前に、複数のオブジェクトのうちレンダリング対象のオブジェクトのエッジデータをロードするエッジロード処理が実行され、
    前記レンダリング手段は、グループごとに複数のオブジェクトをレンダリングするために、レンダリング対象のオブジェクトのエッジデータをロードするエッジロード処理およびロードされたエッジデータに対するエッジソート処理をグループごとに実行することを特徴とする請求項2に記載の画像処理装置。
  4. 前記レンダリング手段は、前記分割レンダリング処理において、前記グループごとに複数のオブジェクトをレンダリングすることでグループごとのビットマップを生成し、生成したグループごとのビットマップを下位レイヤーから順に重ね合わせて、前記複数のオブジェクトに対応するビットマップを生成することを特徴とする請求項1乃至3の何れか1項に記載の画像処理装置。
  5. 前記分割レンダリング処理において重ねあわせられるビットマップは、非可逆圧縮されたビットマップではないことを特徴とする請求項1乃至3の何れか1項に記載の画像処理装置。
  6. 前記レンダリング手段が複数のオブジェクトをレンダリングするために用いられる、複数のオブジェクトそれぞれのディスプレイリストを生成するディスプレイリスト生成手段と、
    前記ディスプレイリスト生成手段が前記複数のオブジェクトそれぞれのディスプレイリストを順次生成する際に、生成されてきたディスプレイリストのデータサイズが所定の値を超えた場合にフォールバック処理が実行されると判定するフォールバック判定手段と、
    を有し、
    前記前記フォールバック判定手段でフォールバック処理が実行されると判定された場合、
    さらに前記レンダリング手段は、生成された前記複数のオブジェクトの一部のオブジェクトのディスプレイリストを用いてレンダリングを実行することで得られるビットマップを非可逆圧縮し、生成された前記複数のオブジェクトの残りのオブジェクトのディスプレイリストを用いてレンダリングを実行することで得られるビットマップを、前記非可逆圧縮されたビットマップと重ね合わせることで前記複数のオブジェクトに対応するビットマップを生成することを特徴とする請求項1乃至5の何れか1項に記載の画像処理装置。
  7. 前記判定手段は、少なくとも、前記複数のオブジェクトのエッジデータのデータサイズ、または、前記複数のオブジェクトの数、または、前記複数のオブジェクトのエッジデータの数のいずれかの情報を判定情報として用いて、キャッシュミスヒットが発生しうるかを判定することを特徴とする請求項1乃至6の何れか1項に記載の画像処理装置。
  8. 前記判定手段は、前記判定情報が所定の基準値以上である場合、キャッシュミスヒットが発生しうると判定し、前記判定情報が所定の基準値未満である場合、キャッシュミスヒットが発生しうると判定しないことを特徴とする請求項7に記載の画像処理装置。
  9. 前記判定情報が前記オブジェクトのエッジデータの数である場合、前記基準値は、CPUキャッシュのメモリサイズをエッジデータの単位データサイズで割った値であることを特徴とする請求項8に記載の画像処理装置。
  10. 前記複数のオブジェクトを含む画像データを複数のバンド領域に分割する分割手段をさらに有し、
    前記レンダリング手段は、前記分割手段によって分割された各バンド領域に対して、バンド領域単位で処理を実行することを特徴とする請求項1乃至9の何れか1項に記載の画像処理装置。
  11. 複数のオブジェクトをレンダリングする際に用いられるCPUキャッシュを有する画像処理装置の実行する画像処理方法であって、
    CPUキャッシュのキャッシュミスヒットが発生しうるかを判定する判定工程と、
    前記判定工程でキャッシュミスヒットが発生しうると判定される場合、複数のオブジェクトをキャッシュミスヒットしないように複数のグループに分類し、複数のグループに分類されたオブジェクトについて、グループごとに複数のオブジェクトをレンダリングすることで、複数のオブジェクトに対応するビットマップを生成する分割レンダリング処理を実行し、
    前記判定手段でキャッシュミスヒットが発生しうると判定されない場合、複数のオブジェクトを複数のグループに分類することなくレンダリングすることで、複数のオブジェクトに対応するビットマップを生成するレンダリング工程と、
    を有することを特徴とする画像処理方法。
  12. 請求項1乃至10の何れか1項に記載の各手段としてコンピュータを機能させるためのコンピュータプログラム。
JP2012137915A 2012-06-19 2012-06-19 画像処理装置、画像処理方法、コンピュータプログラム Pending JP2014002591A (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2012137915A JP2014002591A (ja) 2012-06-19 2012-06-19 画像処理装置、画像処理方法、コンピュータプログラム
US13/919,162 US9443174B2 (en) 2012-06-19 2013-06-17 Image processing apparatus, image processing method, and storage medium

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2012137915A JP2014002591A (ja) 2012-06-19 2012-06-19 画像処理装置、画像処理方法、コンピュータプログラム

Publications (2)

Publication Number Publication Date
JP2014002591A true JP2014002591A (ja) 2014-01-09
JP2014002591A5 JP2014002591A5 (ja) 2015-08-06

Family

ID=49755636

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2012137915A Pending JP2014002591A (ja) 2012-06-19 2012-06-19 画像処理装置、画像処理方法、コンピュータプログラム

Country Status (2)

Country Link
US (1) US9443174B2 (ja)
JP (1) JP2014002591A (ja)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9672454B2 (en) 2015-04-22 2017-06-06 Canon Kabushiki Kaisha Image processing apparatus for rendering plurality of objects by dividing plurality of objects into plurality of groups, and image processing method
JP7514204B2 (ja) 2021-03-26 2024-07-10 ローランドディー.ジー.株式会社 Rip装置、プリンタ、およびプログラム

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2014002591A (ja) * 2012-06-19 2014-01-09 Canon Inc 画像処理装置、画像処理方法、コンピュータプログラム
JP6009371B2 (ja) * 2013-02-26 2016-10-19 ルネサスエレクトロニクス株式会社 画像処理lsi及び画像処理プログラム
JP6422085B2 (ja) * 2014-05-07 2018-11-14 富士通クライアントコンピューティング株式会社 情報処理装置

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2009274366A (ja) * 2008-05-15 2009-11-26 Canon Inc 画像処理方法及び画像処理装置とその制御方法
JP2010238236A (ja) * 2009-03-30 2010-10-21 Sharp Corp 印刷システムおよび印刷システムの制御方法

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3753263B2 (ja) * 1995-08-23 2006-03-08 ヒューレット・パッカード・カンパニー 画像を処理する方法
JP4343344B2 (ja) 1998-09-11 2009-10-14 キヤノン株式会社 ラスタ形式のグラフィックオブジェクトを用いたイメージの高速レンダリング方法
AUPQ905800A0 (en) 2000-07-28 2000-08-24 Canon Kabushiki Kaisha Rendering page descriptions
US20040246502A1 (en) * 2003-06-09 2004-12-09 Jacobsen Dana A. Rendering sub-sections
US7248265B2 (en) * 2004-04-16 2007-07-24 Apple Inc. System and method for processing graphics operations with graphics processing unit
JP4164518B2 (ja) * 2006-06-05 2008-10-15 キヤノン株式会社 画像処理装置及びその制御方法、プログラム
JP5596938B2 (ja) * 2009-06-02 2014-09-24 キヤノン株式会社 画像処理装置、画像処理方法、及びプログラム
JP2014002591A (ja) * 2012-06-19 2014-01-09 Canon Inc 画像処理装置、画像処理方法、コンピュータプログラム

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2009274366A (ja) * 2008-05-15 2009-11-26 Canon Inc 画像処理方法及び画像処理装置とその制御方法
JP2010238236A (ja) * 2009-03-30 2010-10-21 Sharp Corp 印刷システムおよび印刷システムの制御方法

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9672454B2 (en) 2015-04-22 2017-06-06 Canon Kabushiki Kaisha Image processing apparatus for rendering plurality of objects by dividing plurality of objects into plurality of groups, and image processing method
JP7514204B2 (ja) 2021-03-26 2024-07-10 ローランドディー.ジー.株式会社 Rip装置、プリンタ、およびプログラム

Also Published As

Publication number Publication date
US9443174B2 (en) 2016-09-13
US20130335779A1 (en) 2013-12-19

Similar Documents

Publication Publication Date Title
JP5643574B2 (ja) 画像処理装置及び画像処理方法
JP5209953B2 (ja) 画像データ供給装置および画像データ供給方法
JP2014002591A (ja) 画像処理装置、画像処理方法、コンピュータプログラム
JP5171733B2 (ja) 画像処理装置及び画像処理方法
JP2017024321A (ja) 画像処理装置、画像形成装置及び画像処理時間予測方法及びプログラム
JP5397678B2 (ja) 画像処理装置、画像形成装置、画像処理方法およびプログラム
US8599433B2 (en) Image processor, image processing method, computer readable medium, and image processing system
CN107102827B (zh) 改善图像对象的质量的方法以及执行该方法的设备
JP6135329B2 (ja) 印刷データ処理装置、プログラム、及びシステム
JP2016206934A (ja) 画像処理装置、画像処理方法及びプログラム
JP2014194635A (ja) 画像形成装置及び画像形成方法ならびにプログラム
JP2010157928A (ja) 画像処理装置、画像処理システム、画像処理装置の制御方法及びプログラム
JP4964219B2 (ja) 画像処理装置、方法及びプログラム
JP5223492B2 (ja) 印刷制御装置及び印刷制御プログラム
JP2015075839A (ja) 画像処理装置、画像処理方法、及びプログラム
JP5929689B2 (ja) プレビュー画像生成装置、プレビュー画像生成方法およびコンピュータープログラム
JP5820159B2 (ja) 画像処理装置及び画像処理方法
JP4475680B2 (ja) 画像処理装置及びその制御方法、プログラム
JP2019111677A (ja) 画像処理装置、画像処理装置の制御方法、画像形成装置およびプログラム
JP6512763B2 (ja) 情報処理装置、情報処理方法、プログラム
JP2007081886A (ja) 描画処理装置
JP6175981B2 (ja) 情報処理装置及びプログラム
JP6015478B2 (ja) 制御装置、制御方法およびプリンタードライバプログラム
JP2011000794A (ja) 画像形成装置及び画像形成方法ならびに画像形成方法を実行するプログラム
EP3819782B1 (en) Computing device, method of operation and computer program for a computing device

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20150619

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20150619

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20160426

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20160517

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20160715

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20161018