(57)【特許請求の範囲】
【請求項１】
生産者スレッドが、スクリーンショットサービスを呼び出すアプリケーションからスクリーンショット命令を受信し、前記受信したスクリーンショット命令の指示に応答して、スクリーンショット操作を実行し、且つキャプチャしたスクリーンデータをバッファ領域に書き込むステップと、
消費者スレッドが、前記バッファ領域から生産者スレッドの記憶したスクリーンデータを読み取り、前記スクリーンデータに対して画像処理を行って、スクリーンショット画像を生成し、且つ前記スクリーンショット画像を、スクリーンショットサービスを呼び出したアプリケーションに返すステップと、を含む
ことを特徴とする端末機器においてスクリーンショットサービスを提供するための方法。
【請求項２】
前記生産者スレッドがスクリーンショット操作を実行する処理と、
前記生産者スレッドがキャプチャしたスクリーンデータをバッファ領域に書き込む処理と、
前記消費者スレッドが前記バッファ領域から生産者スレッドの記憶したスクリーンデータを読み取る処理とを、
スレッド同期メカニズムにより制御して、前記生産者スレッド及び消費者スレッドが前記バッファ領域に同時アクセスすることを防止するステップを更に含む
ことを特徴とする請求項１に記載の方法。
【請求項３】
前記スレッド同期メカニズムは、ミューテックス、クリティカルセクション、イベント及びセマフォのうちの１つを含む
ことを特徴とする請求項２に記載の方法。
【請求項４】
前記消費者スレッドが前記スクリーンショット命令の処理パラメータを取得するステップを更に含み、
前記消費者スレッドが前記スクリーンデータに対して画像処理を行って、スクリーンショット画像を生成する処理においては、
前記消費者スレッドが取得した前記スクリーンショット命令の処理パラメータに応じて、前記スクリーンデータに対して画像処理を行って、スクリーンショット画像を生成するステップを含む
ことを特徴とする請求項２に記載の方法。
【請求項５】
前記スクリーンショットサービスのメインスレッドが前記生産者スレッド及び消費者スレッドを開始し、且つ指定されたポートに、前記の前記スクリーンショットサービスを呼び出したアプリケーションとのセッション接続を確立するステップと、
前記生産者スレッドが前記セッション接続におけるデータ読み取り指示を監視することで、スクリーンショット命令の指示が受信されたことを確定するステップと、を更に含む
ことを特徴とする請求項１〜４のいずれか１項に記載の方法。
【請求項６】
前記消費者スレッドが前記スクリーンショット画像を、スクリーンショットサービスを呼び出したアプリケーションに返す処理においては、
前記消費者スレッドが前記セッション接続を介して前記スクリーンショット画像を、前記の前記スクリーンショットサービスを呼び出したアプリケーションに送信するステップを含む
ことを特徴とする請求項５に記載の方法。
【請求項７】
前記スクリーンショットサービスのメインスレッドには少なくとも１つの前記バッファ領域が設置されている
ことを特徴とする請求項５に記載の方法。
【請求項８】
前記生産者スレッドがキャプチャしたスクリーンデータをバッファ領域に書き込む処理においては、
前記生産者スレッドが、書き込み位置に応じて、キャプチャしたスクリーンデータをバッファ領域に書き込み、且つ前記バッファ領域のデータ長及び書き込み位置を更新するステップを含む
ことを特徴とする請求項７に記載の方法。
【請求項９】
前記消費者スレッドが前記バッファ領域から生産者スレッドの記憶したスクリーンデータを読み取る処理においては、
前記消費者スレッドが、読み取り位置に応じて、前記バッファ領域から生産者スレッドの記憶したスクリーンデータを読み取り、且つ前記バッファ領域のデータ長及び読み取り位置を更新するステップを含む
ことを特徴とする請求項７に記載の方法。
【請求項１０】
前記バッファ領域がリングバッファ領域である
ことを特徴とする請求項７に記載の方法。
【請求項１１】
生産者スレッドにより、スクリーンショットサービスを呼び出すアプリケーションからスクリーンショット命令を受信し、前記受信したスクリーンショット命令の指示に応答して、スクリーンショット操作を実行し、且つキャプチャしたスクリーンデータをバッファ領域に書き込むためのスクリーンショット操作モジュールと、
消費者スレッドにより、前記バッファ領域から生産者スレッドの記憶したスクリーンデータを読み取り、前記スクリーンデータに対して画像処理を行って、スクリーンショット画像を生成し、且つ前記スクリーンショット画像を、スクリーンショットサービスを呼び出したアプリケーションに返すためのデータ処理モジュールと、を備える
ことを特徴とする端末機器においてスクリーンショットサービスを提供するための装置。
【請求項１２】
前記生産者スレッドがスクリーンショット操作を実行する処理と、
前記生産者スレッドがキャプチャしたスクリーンデータをバッファ領域に書き込む処理と、
前記消費者スレッドが前記バッファ領域から生産者スレッドの記憶したスクリーンデータを読み取る処理とを、
スレッド同期メカニズムにより制御して、前記生産者スレッド及び消費者スレッドが前記バッファ領域に同時アクセスすることを防止するためのスレッド同期モジュールを更に備える
ことを特徴とする請求項１１に記載の装置。
【請求項１３】
前記スレッド同期メカニズムは、ミューテックス、クリティカルセクション、イベント及びセマフォのうちの１つを含む
ことを特徴とする請求項１２に記載の装置。
【請求項１４】
前記データ処理モジュールは、前記消費者スレッドにより、前記スクリーンショット命令の処理パラメータを取得し、且つ取得した処理パラメータに応じて前記スクリーンデータに対して画像処理を行って、スクリーンショット画像を生成することにさらに用いられる
ことを特徴とする請求項１２に記載の装置。
【請求項１５】
前記スクリーンショットサービスのメインスレッドにより、前記生産者スレッド及び消費者スレッドを開始し、指定されたポートに、前記の前記スクリーンショットサービスを呼び出したアプリケーションとのセッション接続を確立するための主制御モジュールを更に備え、
前記スクリーンショット操作モジュールは、前記生産者スレッドにより、前記セッション接続におけるデータ読み取り指示を監視することで、スクリーンショット命令の指示が受信されたことを確定することに用いられる
ことを特徴とする請求項１１〜１４のいずれか１項に記載の装置。
【請求項１６】
前記データ処理モジュールは、前記消費者スレッドにより、セッション接続を介して前記スクリーンショット画像を、前記の前記スクリーンショットサービスを呼び出したアプリケーションに送信することに用いられる
ことを特徴とする請求項１５に記載の装置。
【請求項１７】
前記スクリーンショットサービスのメインスレッドには少なくとも１つの前記バッファ領域が設置されている
ことを特徴とする請求項１５に記載の装置。
【請求項１８】
前記スクリーンショット操作モジュールは、前記生産者スレッドにより、書き込み位置に応じて、キャプチャしたスクリーンデータをバッファ領域に書き込み、且つ前記バッファ領域のデータ長及び書き込み位置を更新することに用いられる
ことを特徴とする請求項１７に記載の装置。
【請求項１９】
前記データ処理モジュールは、前記消費者スレッドにより、読み取り位置に応じて、前記バッファ領域から生産者スレッドの記憶したスクリーンデータを読み取り、且つ前記バッファ領域のデータ長及び読み取り位置を更新することに用いられる
ことを特徴とする請求項１７に記載の装置。
【請求項２０】
前記バッファ領域がリングバッファ領域である
ことを特徴とする請求項１７に記載の装置。
【請求項２１】
コンピュータ実行可能な命令を含む記憶媒体であって、前記コンピュータ実行可能な命令は、コンピュータプロセッサにより実行される場合、端末機器においてスクリーンショットサービスを提供するための方法を実行することに用いられ、前記方法は、
生産者スレッドが、スクリーンショットサービスを呼び出すアプリケーションからスクリーンショット命令を受信し、前記受信したスクリーンショット命令の指示に応答して、スクリーンショット操作を実行し、且つキャプチャしたスクリーンデータをバッファ領域に書き込むステップと、
消費者スレッドが、前記バッファ領域から生産者スレッドの記憶したスクリーンデータを読み取り、前記スクリーンデータに対して画像処理を行って、スクリーンショット画像を生成し、且つ前記スクリーンショット画像を、スクリーンショットサービスを呼び出したアプリケーションに返すステップとを、含む
ことを特徴とするコンピュータ実行可能な命令を含む記憶媒体。
【請求項２２】
１つまたは複数のプロセッサと、
メモリと、
１つまたは複数のプログラムとを含み、
前記１つまたは複数のプログラムは、前記メモリに記憶され、前記１つまたは複数のプロセッサに実行される場合、
生産者スレッドが、スクリーンショットサービスを呼び出すアプリケーションからスクリーンショット命令を受信し、前記受信したスクリーンショット命令の指示に応答して、スクリーンショット操作を実行し、且つキャプチャしたスクリーンデータをバッファ領域に書き込み、
消費者スレッドが、前記バッファ領域から生産者スレッドの記憶したスクリーンデータを読み取り、前記スクリーンデータに対して画像処理を行って、スクリーンショット画像を生成し、且つ前記スクリーンショット画像を、スクリーンショットサービスを呼び出したアプリケーションに返す
ことを特徴とする機器。
【発明の詳細な説明】
【技術分野】
【０００１】
本願は、出願日が２０１５年６月１２日であり、出願番号が２０１５１０３２５７０４．０であり、出願人が百度在線網絡技術（北京）有限公司、発明名称が「端末機器においてスクリーンショットサービスを提供するための方法及び装置」である中国特許出願の優先権を主張し、当該特許出願の全文を参照のために取り込む。
【０００２】
本開示はコンピュータ応用技術に関し、特に端末機器においてスクリーンショットサービスを提供するための方法、装置、記憶媒体及び機器に関する。
【背景技術】
【０００３】
例えばパーソナルコンピュータ、ノートパソコン、スマートフォン、タブレットコンピュータ、パーソナルデジタルアシスタント等の端末機器において、通常スクリーンショット機能を搭載している。ユーザは、ショートカットキー、メニュー項目又は機能ボタンによりスクリーン全体、スクリーンの一部領域（例えば、あるウィンドウ、又は一部の文字を表示する領域）の画像をショットすることができる。
【０００４】
スクリーンショット処理では、まず目標領域のスクリーンデータをキャプチャする必要があり、次にキャプチャしたスクリーンデータに対して画像処理を行い、所定のパラメータに応じて前記スクリーンデータを画像データに変換（例えばスケーリング、反転、行列変換等）し、更に前記画像データを記憶したり表示したりする。
【０００５】
例えばスマートフォン等の携帯端末の演算処理能力は制限があるので、現在、携帯端末でのスクリーンショット手段では、スクリーンショットと画像処理が別々に行われるため、通常、この２段階の処理を完成するまで少なくとも数百ミリ秒を必要とし、現在、アンドロイド（android、登録商標）携帯電話のスクリーンショット及び画像処理について５０ミリ秒以下の遅延に達する手段がない。
【０００６】
このような長い遅延により、時間通りに、リアルタイムにスクリーン録画を行うことができず、従来の手段がリアルタイムでマルチスクリーンインタラクティブな製品に適用できない。また、スクリーンショットと画像処理が別々に行われるため、手順が複雑で、システムリソースの浪費及びデータ管理の混乱が引き起こされた。
【０００７】
また、従来のスクリーンショット手段がサードパーティのシステムに統合される場合、サードパーティのシステムの製品アーキテクチャに結合される必要があり、ホスト製品の統合コストが高く、メンテナンスが困難である問題を引き起こしやすい。
【発明の概要】
【発明が解決しようとする課題】
【０００８】
本開示の実施例は、スクリーンショットを実行する処理時間を短縮して、ユーザエクスペリエンスを向上させるように、端末機器においてスクリーンショットサービスを提供するための方法、装置、記憶媒体及び機器を提供することを目的とする。
【課題を解決するための手段】
【０００９】
本開示の第１の態様によれば、端末機器においてスクリーンショットサービスを提供するための方法を提供し、この方法は、生産者スレッドが、受信したスクリーンショット命令の指示に応答して、スクリーンショット操作を実行し、且つキャプチャしたスクリーンデータをバッファ領域に書き込むステップと、消費者スレッドが、前記バッファ領域から生産者スレッドの記憶したスクリーンデータを読み取り、前記スクリーンデータに対して画像処理を行って、スクリーンショット画像を生成し、且つ前記スクリーンショット画像を、スクリーンショットサービスを呼び出したアプリケーションに返すステップと、を含む。
【００１０】
好ましくは、前記方法は、前記生産者スレッドがスクリーンショット操作を実行する処理と、前記生産者スレッドがキャプチャしたスクリーンデータをバッファ領域に書き込む処理と、前記消費者スレッドが前記バッファ領域から生産者スレッドの記憶したスクリーンデータを読み取る処理とを、スレッド同期メカニズムにより制御して、前記生産者スレッド及び消費者スレッドが前記バッファ領域に同時アクセスすることを防止するステップを更に含む。
【００１１】
好ましくは、前記方法は、前記消費者スレッドが前記スクリーンショット命令の処理パラメータを取得するステップを更に含む。前記消費者スレッドが前記スクリーンデータに対して画像処理を行って、スクリーンショット画像を生成する処理においては、前記消費者スレッドが取得した前記スクリーンショット命令の処理パラメータに応じて、前記スクリーンデータに対して画像処理を行って、スクリーンショット画像を生成するステップを含む。
【００１２】
好ましくは、前記方法は、前記スクリーンショットサービスのメインスレッドが前記生産者スレッド及び消費者スレッドを開始し、且つ指定されたポートに、前記の前記スクリーンショットサービスを呼び出したアプリケーションとのセッション接続を確立するステップと、前記生産者スレッドが前記セッション接続におけるデータ読み取り指示を監視することで、スクリーンショット命令の指示が受信されたことを確定するステップと、を更に含む。
【００１３】
好ましくは、前記消費者スレッドが前記スクリーンショット画像を、スクリーンショットサービスを呼び出したアプリケーションに返す処理においては、前記消費者スレッドが前記セッション接続を介して前記スクリーンショット画像を、前記の前記スクリーンショットサービスを呼び出したアプリケーションに送信するステップを含む。
【００１４】
好ましくは、前記スクリーンショットサービスのメインスレッドには少なくとも１つの前記バッファ領域が設置されている。
【００１５】
好ましくは、前記生産者スレッドがキャプチャしたスクリーンデータをバッファ領域に書き込む処理においては、前記生産者スレッドが、書き込み位置に応じて、キャプチャしたスクリーンデータをバッファ領域に書き込み、且つ前記バッファ領域のデータ長及び書き込み位置を更新するステップを含む。
【００１６】
好ましくは、前記消費者スレッドが前記バッファ領域から生産者スレッドの記憶したスクリーンデータを読み取る処理においては、前記消費者スレッドが、読み取り位置に応じて、前記バッファ領域から生産者スレッドの記憶したスクリーンデータを読み取り、且つ前記バッファ領域のデータ長及び読み取り位置を更新するステップを含む。
【００１７】
好ましくは、前記バッファ領域がリングバッファ領域である。
【００１８】
選択的に、前記スレッド同期メカニズムはミューテックス、クリティカルセクション、イベント及びセマフォのうちの１つであってもよい。
【００１９】
本開示の第２の態様によれば、端末機器においてスクリーンショットサービスを提供するための装置を提供し、この装置は、生産者スレッドにより、受信したスクリーンショット命令の指示に応答して、スクリーンショット操作を実行し、且つキャプチャしたスクリーンデータをバッファ領域に書き込むためのスクリーンショット操作モジュールと、消費者スレッドにより、前記バッファ領域から生産者スレッドの記憶したスクリーンデータを読み取り、前記スクリーンデータに対して画像処理を行って、スクリーンショット画像を生成し、且つ前記スクリーンショット画像を、スクリーンショットサービスを呼び出したアプリケーションに返すためのデータ処理モジュールと、を備える。
【００２０】
好ましくは、前記装置は、前記生産者スレッドがスクリーンショット操作を実行する処理と、前記生産者スレッドがキャプチャしたスクリーンデータをバッファ領域に書き込む処理と、前記消費者スレッドが前記バッファ領域から生産者スレッドの記憶したスクリーンデータを読み取る処理とを、スレッド同期メカニズムにより制御して、前記生産者スレッド及び消費者スレッドが前記バッファ領域に同時アクセスすることを防止するためのスレッド同期モジュールを更に備える。
【００２１】
好ましくは、前記データ処理モジュールは、前記消費者スレッドにより、前記スクリーンショット命令の処理パラメータを取得し、且つ取得した処理パラメータに応じて前記スクリーンデータに対して画像処理を行って、スクリーンショット画像を生成することにさらに用いられる。
【００２２】
好ましくは、前記スクリーンショットサービスのメインスレッドにより、前記生産者スレッド及び消費者スレッドを開始し、指定されたポートに、前記の前記スクリーンショットサービスを呼び出したアプリケーションとのセッション接続を確立するための主制御モジュールを更に備え、前記スクリーンショット操作モジュールは、前記生産者スレッドにより、前記セッション接続におけるデータ読み取り指示を監視することで、スクリーンショット命令の指示が受信されたことを確定することに用いられる。
【００２３】
好ましくは、前記データ処理モジュールは、前記消費者スレッドにより、セッション接続を介して前記スクリーンショット画像を、前記の前記スクリーンショットサービスを呼び出したアプリケーションに送信することに用いられる。
【００２４】
好ましくは、前記スクリーンショットサービスのメインスレッドには少なくとも１つの前記バッファ領域が設置されている。
【００２５】
好ましくは、前記スクリーンショット操作モジュールは、前記生産者スレッドにより、書き込み位置に応じて、キャプチャしたスクリーンデータをバッファ領域に書き込み、且つ前記バッファ領域のデータ長及び書き込み位置を更新することに用いられる。
【００２６】
好ましくは、前記データ処理モジュールは、前記消費者スレッドにより、読み取り位置に応じて、前記バッファ領域から生産者スレッドの記憶したスクリーンデータを読み取り、且つ前記バッファ領域のデータ長及び読み取り位置を更新することに用いられる。
【００２７】
好ましくは、前記バッファ領域がリングバッファ領域である。
【００２８】
選択的に、前記スレッド同期メカニズムは、ミューテックス、クリティカルセクション、イベント及びセマフォのうちの１つを含んでもよい。
【００２９】
本開示の第３の態様によれば、コンピュータ実行可能な命令を含む記憶媒体を提供し、前記コンピュータ実行可能な命令は、コンピュータプロセッサにより実行される場合、端末機器においてスクリーンショットサービスを提供するための方法を実行することに用いられ、前記方法は、生産者スレッドが、受信したスクリーンショット命令の指示に応答して、スクリーンショット操作を実行し、且つキャプチャしたスクリーンデータをバッファ領域に書き込むステップと、消費者スレッドが、前記バッファ領域から生産者スレッドの記憶したスクリーンデータを読み取り、前記スクリーンデータに対して画像処理を行って、スクリーンショット画像を生成し、且つ前記スクリーンショット画像を、スクリーンショットサービスを呼び出したアプリケーションに返すステップとを、含む。
【００３０】
本開示の第４の態様によれば、機器を提供して、
１つまたは複数のプロセッサと、
メモリと、
１つまたは複数のプログラムとを含み、前記１つまたは複数のプログラムは、前記メモリに記憶され、前記１つまたは複数のプロセッサに実行される場合、
生産者スレッドが、受信したスクリーンショット命令の指示に応答して、スクリーンショット操作を実行し、且つキャプチャしたスクリーンデータをバッファ領域に書き込み、
消費者スレッドが、前記バッファ領域から生産者スレッドの記憶したスクリーンデータを読み取り、前記スクリーンデータに対して画像処理を行って、スクリーンショット画像を生成し、且つ前記スクリーンショット画像を、スクリーンショットサービスを呼び出したアプリケーションに返す。
【００３１】
本開示実施例に係る端末機器においてスクリーンショットサービスを提供するための方法、装置、記憶媒体及び機器によれば、生産者／消費者のマルチスレッドモードを用い、それぞれスクリーンショットを実行するための生産者スレッド及びショットされたスクリーンデータに対して画像処理を行うための消費者スレッドにより、スクリーンショットサービスを完成し、処理能力の制限がある携帯端末機器において、特にスクリーンショット時間を削減でき、数十ミリ秒内にスクリーンショットサービスを完成することを実現できる。
【００３２】
なお、同一機器において、スクリーンショットサービスを使用するアプリケーションをクライアントとし、前記スクリーンショットサービスの処理全体をサーバとするクライアント−サーバアーキテクチャ（Ｃ／Ｓアーキテクチャ）を用いることで、詳しいスクリーンショット処理操作の詳細と前記のスクリーンショットサービスを使用するアプリケーションとを分離させ、前記スクリーンショットサービスを他の製品アーキテクチャに統合させやすくする。
【００３３】
以下、本発明の実施例における技術案をさらに詳しく説明するために、実施例に用いられる図面を簡単に説明し、勿論、以下の図面は本発明のいくつかの実施例に過ぎず、当業者にとって、創造的労働なしにこれらの図面に対して修正や変更を行うこともできる
【図面の簡単な説明】
【００３４】
【図１】本開示の実施例１に係る端末機器においてスクリーンショットサービスを提供するための方法を示すフローチャートである。
【図２】本開示の実施例２に係る端末機器においてスクリーンショットサービスを提供するための方法を示すフローチャートである。
【図３】本開示の実施例２に係るスクリーンショットサービスの動作フレームワークを示す模式図である。
【図４】本開示の実施例３に係る端末機器においてスクリーンショットサービスを提供するための装置を示す論理ブロック図である。
【図５】本開示の実施例５に係る端末機器においてスクリーンショットサービスを提供するための方法を実行する装置のハードウェア構造模式図である。
【発明を実施するための形態】
【００３５】
本開示の基本的な構想は、端末機器においてスクリーンショットサービスを提供する技術案を提供し、生産者／消費者のマルチスレッドモードに応じて、スクリーンショットを実行するための生産者スレッド及びキャプチャされたスクリーンデータに対して画像処理を行うための消費者スレッドのそれぞれにより、スクリーンショットサービスを完成することである。
【００３６】
なお、同一機器において、スクリーンショットサービスを使用するアプリケーションをクライアントとし、前記スクリーンショットサービスの処理全体をサーバとするクライアント−サーバアーキテクチャ（Ｃ／Ｓアーキテクチャ）を用いることで、詳しいスクリーンショット処理操作の詳細と前記のスクリーンショットサービスを使用するアプリケーションを分離し、前記スクリーンショットサービスを他の製品アーキテクチャに統合させやすくする。
【００３７】
以下、図面を参照しながら本開示の例示的な実施例を詳しく説明する。
【００３８】
実施例１
図１は本開示の実施例１に係る端末機器においてスクリーンショットサービスを提供するための方法を示すフローチャートである。例えば、図４に示す装置によって本開示の実施例１に係るスクリーンショットサービスを提供する方法を実行することができる。
【００３９】
図１を参照し、スクリーンショットサービスはまず生産者スレッド及び消費者スレッドを開始する。
【００４０】
端末機器のユーザがスクリーンショット指令を出した後に、ステップＳ１１０では、前記生産者スレッドはユーザのスクリーンショット命令指示を受信したり検出したりし、ステップＳ１２０では、前記生産者スレッドはスクリーンショット操作を実行し、スクリーンデータを取得し、ステップＳ１３０では、前記生産者スレッドはキャプチャしたスクリーンデータをバッファ領域に書き込む。ステップＳ１２０では、前記生産者スレッドは例えばアンドロイドシステムのオリジナルのスクリーンショット方法を呼び出して高速スクリーンショットを実行することができる。
【００４１】
ここで、前記バッファ領域は前記生産者スレッド及び消費者スレッドの両方ともアクセス可能なグローバルバッファ領域である。
【００４２】
その後、生産者スレッドと消費者スレッドとの間に設置されたスレッド同期メカニズムにより、前記消費者スレッドはステップＳ２１０〜Ｓ２３０を実行し始める。
【００４３】
具体的には、ステップＳ２１０では、前記消費者スレッドは前記バッファ領域から生産者スレッドの記憶したスクリーンデータを読み取り、ステップＳ２２０では、前記消費者スレッドは前記スクリーンデータに対して必要な画像処理を行って、スクリーンショット画像を生成し、ステップＳ２３０では、前記消費者スレッドは前記スクリーンショット画像を、スクリーンショットサービスを呼び出したアプリケーションに返す。
【００４４】
前記ステップの処理により、端末機器においてスクリーンショットサービスを提供するための方法によれば、生産者スレッド及び消費者スレッドによりスクリーンショット及び画像処理をそれぞれ実行し、共有するデータバッファ領域によりショットされたスクリーンデータを転送することができ、スクリーンショットを完成する処理時間を短縮して、ユーザエクスペリエンスを向上させることができる。
【００４５】
実施例２
図２は本開示の実施例２に係る端末機器においてスクリーンショットサービスを提供するための方法を示すフローチャートである。図２において、図１と同一の符号を有するステップの操作はそれぞれ図１における対応するステップで実行する操作と類似するので、ここで省略する。
【００４６】
生産者スレッド及び消費者スレッドによりスクリーンショットサービスのスクリーンショット及び画像処理操作をそれぞれ実行するため、前記バッファ領域の読み書きに対して同期制御を行うために、本開示の例示的な実施例によれば、前記方法は、前記生産者スレッドがスクリーンショット操作を実行する処理と、前記生産者スレッドがキャプチャしたスクリーンデータをバッファ領域に書き込む処理と、前記消費者スレッドが前記バッファ領域から生産者スレッドの記憶したスクリーンデータを読み取る処理とを、スレッド同期メカニズムにより制御して、前記生産者スレッド及び消費者スレッドが前記バッファ領域に同時アクセスすることを防止するステップを更に含む。
【００４７】
前記スレッド同期メカニズムは、ミューテックス、クリティカルセクション、イベント又はセマフォ等であってもよいが、これらに限定されない。以下、前記生産者スレッド及び消費者スレッドにミューテックスを使用することを例として本開示の実施例２を引く続き説明する。
【００４８】
図２を参照し、具体的には、前記生産者スレッドはステップＳ１２０を実行する前に、前もって前記ミューテックスを取得し、且つ、ステップＳ１３０の操作を完成した後に、前記生産者スレッドは前記ミューテックスを解放する。
【００４９】
一方、前記消費者スレッドはステップＳ２１０を実行する前に、前もって前記ミューテックスを取得し、且つ、ステップＳ２１０を完成した後に、前記消費者スレッドは前記ミューテックスを解放することができる。
【００５０】
さらに、前記消費者スレッドは前記スクリーンショット命令の処理パラメータを更に取得し、前記消費者スレッドが前記スクリーンデータに対して画像処理を行って、スクリーンショット画像を生成する処理においては、具体的には、前記消費者スレッドが取得した前記スクリーンショット命令の処理パラメータに応じて、前記スクリーンデータに対して画像処理を行って、スクリーンショット画像を生成するステップを含んでもよい。その中、処理パラメータは、解像度、サイズ、回転角度及びスケーリング倍数のうちの少なくとも１種を含んでもよい。
【００５１】
さらに、前記バッファ領域への読み書き操作について、前記生産者スレッド及び消費者スレッドは前記バッファ領域のデータ長を維持し、且つその読み位置又は書き位置をそれぞれ維持することができる。
【００５２】
例えば、ステップＳ１３０は、前記生産者スレッドが、書き込み位置に応じて、キャプチャしたスクリーンデータをバッファ領域に書き込み、且つ前記バッファ領域のデータ長及び書き込み位置を更新するステップを含んでもよい。ステップＳ２１０は、前記消費者スレッドが、読み取り位置に応じて、前記バッファ領域から生産者スレッドの記憶したスクリーンデータを読み取り、且つ前記バッファ領域のデータ長及び読み取り位置を更新するステップを含んでもよい。
【００５３】
好ましくは、前記スクリーンショットサービスのメインスレッドには少なくとも１つの前記バッファ領域が設置されている。前記バッファ領域がリングバッファ領域であることにより、前記生産者スレッド及び消費者スレッドは前記バッファ領域を循環的に読み書くことができる。
【００５４】
前記スクリーンショットサービスのフレームワーク全体に対して、以下、図３に示す例を参照して具体的に説明する。ただし、本開示の実現形態は図３に示す形態に限定されず、他の適当な実現形態であってもよい。
【００５５】
図３を参照し、スクリーンショットサービスのアプリケーションＡＰＰを使用することで、本開示に係るスクリーンショットサービスを提供するスクリーンショットサービスアプリケーション又はスクリーンショットサービスメインスレッドを開始でき、或いは、前記ＡＰＰが、動作しているスクリーンショットサービスアプリケーション又はスクリーンショットサービスメインスレッドである。
【００５６】
スクリーンショットサービスアプリケーションのメインスレッドＡ又は前記スクリーンショットサービスメインスレッドＡ（以下、メインスレッドＡと略称する）の役目は、前記生産者スレッドＢ及び消費者スレッドＣを開始し、且つ指定されたポートＰに、前記の前記スクリーンショットサービスを呼び出したアプリケーションとのセッション接続Ｔを確立することである。メインスレッドＡには少なくとも１つの前記バッファ領域Ｆが設置されている。
【００５７】
生産者スレッドＢは前記セッション接続Ｔにおけるデータ読み取り指示を監視することで、スクリーンショット命令の指示が受信されたことを確定し、その後、前記のように、前記ミューテックスを取得した後に、ステップＳ１２０のスクリーンショット及びＳ１３０の書き込み（ｗｒｉｔｅ）操作を実行し、ステップＳ１３０を完成した後に、生産者スレッドＢは前記ミューテックスを解放する。
【００５８】
消費者スレッドＣは、ステップＳ２１０を実行する前に、ミューテックスを取得し、その後、バッファ領域Ｆが空でない場合、ステップＳ２１０、Ｓ２１５、Ｓ２２０及びＳ２３０を実行する。その中、ステップＳ２１０又はＳ２１５を完成した後に、前記ミューテックスを解放する。ステップＳ２３０では、消費者スレッドＢはセッション接続Ｔを介して前記スクリーンショット画像を前記の前記スクリーンショットサービスを呼び出したアプリケーションＡＰＰに送信する。
【００５９】
前記のように、スクリーンショットサービスを使用するアプリケーションをクライアントとし、且つ前記スクリーンショットサービスをサーバとするＣ／Ｓアーキテクチャにより、ステップが簡単で、スクリーンショットを高速に実現して前記アプリケーションにスクリーンショット画像を提供することができるだけでなく、相対的に簡単なサービスアーキテクチャを提供し、サードパーティの製品に統合しやすくすることができる。
【００６０】
実施例３
図４は本開示の実施例３に係る端末機器においてスクリーンショットサービスを提供するための装置を示す論理ブロック図である。
【００６１】
図４を参照し、前記の端末機器においてスクリーンショットサービスを提供するための装置は、スクリーンショット操作モジュール４１０及びデータ処理モジュール４２０を備える。
【００６２】
スクリーンショット操作モジュール４１０は、生産者スレッドにより、受信したスクリーンショット命令の指示に応答して、スクリーンショット操作を実行し、且つキャプチャしたスクリーンデータをバッファ領域に書き込むことに用いられる。
【００６３】
データ処理モジュール４２０は、消費者スレッドにより、前記バッファ領域から生産者スレッドの記憶したスクリーンデータを読み取り、前記スクリーンデータに対して画像処理を行って、スクリーンショット画像を生成し、且つ前記スクリーンショット画像を、スクリーンショットサービスを呼び出したアプリケーションに返すことに用いられる。
【００６４】
本開示の好適な実施例によれば、前記装置は、前記生産者スレッドがスクリーンショット操作を実行する処理と、前記生産者スレッドがキャプチャしたスクリーンデータをバッファ領域に書き込む処理と、前記消費者スレッドが前記バッファ領域から生産者スレッドの記憶したスクリーンデータを読み取る処理とを、スレッド同期メカニズムにより制御して、前記生産者スレッド及び消費者スレッドが前記バッファ領域に同時アクセスすることを防止するためのスレッド同期モジュール４３０を更に備える。前記スレッド同期メカニズムは、ミューテックス、クリティカルセクション、イベント又はセマフォであってもよいが、これらに限定されない。
【００６５】
本開示の好適な実施例によれば、前記スレッド同期メカニズムは、ミューテックス、クリティカルセクション、イベント及びセマフォのうちの１つを含んでもよい。
【００６６】
データ処理モジュール４２０は、前記消費者スレッドにより、前記スクリーンショット命令の処理パラメータを取得し、且つ取得した処理パラメータに応じて前記スクリーンデータに対して画像処理を行って、スクリーンショット画像を生成することにさらに用いられる。
【００６７】
本開示の好適な実施例によれば、前記装置は、前記スクリーンショットサービスのメインスレッドにより前記生産者スレッド及び消費者スレッドを開始し、且つ指定されたポートに、前記の前記スクリーンショットサービスを呼び出したアプリケーションとのセッション接続を確立するための主制御モジュール４４０を更に備え、スクリーンショット操作モジュール４１０は、前記生産者スレッドにより、前記セッション接続におけるデータ読み取り指示を監視することで、スクリーンショット命令の指示が受信されたことを確定することに用いられる。
【００６８】
データ処理モジュール４２０は、前記消費者スレッドによりセッション接続を介して前記スクリーンショット画像を、前記の前記スクリーンショットサービスを呼び出したアプリケーションに送信することに用いられてもよい。
【００６９】
好ましくは、主制御モジュール４４０は前記スクリーンショットサービスのメインスレッドにより少なくとも１つの前記バッファ領域を設置することに更に用いられる。
【００７０】
好ましくは、スクリーンショット操作モジュール４１０は、前記生産者スレッドによりキャプチャしたスクリーンデータをバッファ領域に書き込んだ後に、前記生産者スレッドにより、書き込み位置に応じて、キャプチャしたスクリーンデータをバッファ領域に書き込み、且つ前記バッファ領域のデータ長及び書き込み位置を更新することに更に用いられる。
【００７１】
好ましくは、データ処理モジュール４２０は、前記消費者スレッドにより、読み取り位置に応じて、前記バッファ領域から生産者スレッドの記憶したスクリーンデータを読み取り、且つ前記バッファ領域のデータ長及び読み取り位置を更新することに用いられる。
【００７２】
好ましくは、前記バッファ領域がリングバッファ領域である。
【００７３】
本開示の実施例に係る技術案によれば、生産者／消費者のマルチスレッドモードを用い、スクリーンショットを実行するための生産者スレッド及びショットされたスクリーンデータに対して画像処理を行うための消費者スレッドのそれぞれにより、スクリーンショットサービスを完成し、処理能力の制限がある携帯端末機器において、特に、スクリーンショット時間を削減でき、数十ミリ秒内にスクリーンショットサービスを完成することを実現できる。
【００７４】
なお、同一機器において、スクリーンショットサービスを使用するアプリケーションをクライアントとし、前記スクリーンショットサービスの処理全体をサーバとするクライアント−サーバアーキテクチャ（Ｃ／Ｓアーキテクチャ）を用いることで、詳しいスクリーンショット処理操作の詳細と前記のスクリーンショットサービスを使用するアプリケーションを分離させ、前記スクリーンショットサービスを容易に他の製品アーキテクチャに統合させやすくする。
【００７５】
ただし、実施の必要に応じて、本開示の目的を実現するように、本出願に説明した各部材／ステップをより多くの部材／ステップに分割してもよく、２つ又は複数の部材／ステップ或いは部材／ステップの一部の操作を組み合わせて新たな部材／ステップとしてもよい。
【００７６】
上記の本開示に係る方法は、ハードウェア、ファームウェアにおいて実現されてもよく、又は記録媒体（例えばＣＤ  ＲＯＭ、ＲＡＭ、フロッピー（登録商標）ディスク、ハードディスク又は光磁気ディスク）に記憶可能なソフトウェア又はコンピュータコードとして実現されてもよく、又はネットワークを介してダウンロードされた、リモート記録媒体又は非一時的な機械可読媒体にもともと記憶されているとともにローカル記録媒体に記憶するコンピュータコードとして実現されてもよく、これにより、ここで説明する方法は、汎用コンピュータ、専用プロセッサ又はプログラマブル又は専用のハードウェア（例えばＡＳＩＣ又はＦＰＧＡ）を用いる記録媒体に記憶されているこのようなソフトウェアに処理されることができる。コンピュータ、プロセッサ、マイクロプロセッサコントローラ又はプログラマブルハードウェアは、ソフトウェア又はコンピュータコードを記憶又は受信できる記憶ユニット（例えば、ＲＡＭ、ＲＯＭ、フラッシュ等）を含んでもよく、前記ソフトウェア又はコンピュータコードがコンピュータ、プロセッサ又はハードウェアにアクセスされて実行される場合、ここで説明した処理方法が実現されることが理解すべきである。なお、汎用コンピュータはここで示す処理を実現するためのコードにアクセスする場合、コードの実行により、汎用コンピュータをここで示す処理を実現するための専用コンピュータに変換する。
【００７７】
実施例４
本開示の実施例は、コンピュータ実行可能な命令を含む記憶媒体を提供し、前記コンピュータ実行可能な命令は、コンピュータプロセッサにより実行される場合、端末機器においてスクリーンショットサービスを提供するための方法を実行することに用いられ、前記方法は、
生産者スレッドが、受信したスクリーンショット命令の指示に応答して、スクリーンショット操作を実行し、且つキャプチャしたスクリーンデータをバッファ領域に書き込むステップと、
消費者スレッドが、前記バッファ領域から生産者スレッドの記憶したスクリーンデータを読み取り、前記スクリーンデータに対して画像処理を行って、スクリーンショット画像を生成し、且つ前記スクリーンショット画像を、スクリーンショットサービスを呼び出したアプリケーションに返すステップとを、含む。
【００７８】
上記記憶媒体が前記方法を実行する時に、前記方法は、具体的に、
前記生産者スレッドがスクリーンショット操作を実行する処理と、
前記生産者スレッドがキャプチャしたスクリーンデータをバッファ領域に書き込む処理と、
前記消費者スレッドが前記バッファ領域から生産者スレッドの記憶したスクリーンデータを読み取る処理とを、
スレッド同期メカニズムにより制御して、前記生産者スレッド及び消費者スレッドが前記バッファ領域に同時アクセスすることを防止するステップを更に含んでもよい。
【００７９】
上記記憶媒体が前記方法を実行する時に、前記スレッド同期メカニズムは、ミューテックス、クリティカルセクション、イベント及びセマフォのうちの１つを含む。
【００８０】
上記記憶媒体が前記方法を実行する時に、前記方法は、具体的に、
前記消費者スレッドが前記スクリーンショット命令の処理パラメータを取得するステップを更に含んでもよく、
前記消費者スレッドが前記スクリーンデータに対して画像処理を行って、スクリーンショット画像を生成する処理においては、
前記消費者スレッドが取得した前記スクリーンショット命令の処理パラメータに応じて、前記スクリーンデータに対して画像処理を行って、スクリーンショット画像を生成するステップを含む。
【００８１】
上記記憶媒体が前記方法を実行する時に、前記方法は、具体的に、
前記スクリーンショットサービスのメインスレッドが前記生産者スレッド及び消費者スレッドを開始し、且つ指定されたポートに、前記の前記スクリーンショットサービスを呼び出したアプリケーションとのセッション接続を確立するステップと、
前記生産者スレッドが前記セッション接続におけるデータ読み取り指示を監視することで、スクリーンショット命令の指示が受信されたことを確定するステップと、を更に含んでもよい。
【００８２】
上記記憶媒体が前記方法を実行する時に、前記消費者スレッドが前記スクリーンショット画像を、スクリーンショットサービスを呼び出したアプリケーションに返す処理においては、
前記消費者スレッドが前記セッション接続を介して前記スクリーンショット画像を、前記の前記スクリーンショットサービスを呼び出したアプリケーションに送信するステップを含む。
【００８３】
上記記憶媒体が前記方法を実行する時に、前記スクリーンショットサービスのメインスレッドには少なくとも１つの前記バッファ領域が設置されている。
【００８４】
上記記憶媒体が前記方法を実行する時に、前記生産者スレッドがキャプチャしたスクリーンデータをバッファ領域に書き込む処理においては、具体的に、
前記生産者スレッドが、書き込み位置に応じて、キャプチャしたスクリーンデータをバッファ領域に書き込み、且つ前記バッファ領域のデータ長及び書き込み位置を更新するステップを更に含んでもよい。
【００８５】
上記記憶媒体が前記方法を実行する時に、前記消費者スレッドが前記バッファ領域から生産者スレッドの記憶したスクリーンデータを読み取る処理においては、具体的に、
前記消費者スレッドが、読み取り位置に応じて、前記バッファ領域から生産者スレッドの記憶したスクリーンデータを読み取り、且つ前記バッファ領域のデータ長及び読み取り位置を更新するステップを更に含んでもよい。
【００８６】
上記記憶媒体が前記方法を実行する時に、前記バッファ領域が具体的にリングバッファ領域であってもよい。
【００８７】
実施例５
図５は本開示の実施例５に係る端末機器においてスクリーンショットサービスを提供するための方法を実行する装置のハードウェア構造模式図である。図５を参照し、当該機器は、
１つまたは複数のプロセッサ５１０（図５では１つのプロセッサ５１０を例とする）と、
メモリ５２０と、
１つまたは複数のモジュールとを含む。
【００８８】
前記機器は、入力装置５３０及び出力装置５４０を更に含んでもよい。前記機器におけるプロセッサ５１０、メモリ５２０、入力装置５３０及び出力装置５４０はバス又は他の方式を介して接続することができ、図５では、バスを介して接続することを例とする。
【００８９】
メモリ５２０は、コンピュータ可読記憶媒体の１種として、ソフトウェアプログラム、コンピュータ実行可能プログラム及びモジュールを記憶することに用いられることができ、例えば、本開示の実施例における端末機器においてスクリーンショットサービスを提供するための方法に対応するプログラム指令／モジュール（例えば、図４に示す端末機器においてスクリーンショットサービスを提供するための装置におけるスクリーンショット操作モジュール４１０、データ処理モジュール４２０、スレッド同期モジュール４３０及び主制御モジュール４４０）が挙げられる。プロセッサ５１０は、メモリ５２０に記憶されているソフトウェアプログラム、指令及びモジュールを実行することにより、機器の様々な機能アプリケーション及びデータ処理を実行し、つまり、上記方法の実施例における端末機器においてスクリーンショットサービスを提供するための方法を実現する。
【００９０】
メモリ５２０は、プログラム記憶領域及びデータ記憶領域を含んでもよく、その中、プログラム記憶領域はオペレーティングシステム、少なくとも１つの機能に必要なアプリケーションプログラムを記憶することができ、データ記憶領域は端末機器の使用に基づいて作成したデータ等を記憶することができる。なお、メモリ５２０は高速ランダムアクセスメモリを含んでもよく、不揮発性メモリ、例えば少なくとも１つのディスク記憶デバイス、フラッシュデバイス、又は他の不揮発性固体メモリデバイスを更に含んでもよい。いくつかの例において、メモリ５２０はプロセッサ５１０に対してリモート設定されたメモリを更に含んでもよく、これらのリモートメモリはネットワークを介して端末機器に接続することができる。上記ネットワークの例はインターネット、イントラネット、ローカルエリアネットワーク、移動体通信ネットワーク及びその組み合わせを含むが、これらに限定されない。
【００９１】
入力装置５３０は入力された数字や文字情報を受信すること、及び端末のユーザ設定及び機能制御に関連するキー信号入力を発生させることに用いられてもよい。出力装置５４０はディスプレイ等の表示機器を含んでもよい。
【００９２】
前記１つまたは複数のモジュールは前記メモリ５２０に記憶され、前記１つまたは複数のプロセッサ５１０に実行される場合、
生産者スレッドが、受信したスクリーンショット命令の指示に応答して、スクリーンショット操作を実行し、且つキャプチャしたスクリーンデータをバッファ領域に書き込み、
消費者スレッドが、前記バッファ領域から生産者スレッドの記憶したスクリーンデータを読み取り、前記スクリーンデータに対して画像処理を行って、スクリーンショット画像を生成し、且つ前記スクリーンショット画像を、スクリーンショットサービスを呼び出したアプリケーションに返す。
【００９３】
さらに、前記方法は、
前記生産者スレッドがスクリーンショット操作を実行する処理と、
前記生産者スレッドがキャプチャしたスクリーンデータをバッファ領域に書き込む処理と、
前記消費者スレッドが前記バッファ領域から生産者スレッドの記憶したスクリーンデータを読み取る処理とを、
スレッド同期メカニズムにより制御して、前記生産者スレッド及び消費者スレッドが前記バッファ領域に同時アクセスすることを防止するステップを更に含む。
【００９４】
さらに、前記スレッド同期メカニズムは、ミューテックス、クリティカルセクション、イベント及びセマフォのうちの１つを含んでもよい。
【００９５】
さらに、前記方法は、
前記消費者スレッドが前記スクリーンショット命令の処理パラメータを取得することを更に含んでもよく、
前記消費者スレッドが前記スクリーンデータに対して画像処理を行って、スクリーンショット画像を生成する処理においては、
前記消費者スレッドが取得した前記スクリーンショット命令の処理パラメータに応じて、前記スクリーンデータに対して画像処理を行って、スクリーンショット画像を生成するステップを含む。
【００９６】
さらに、前記方法は、
前記スクリーンショットサービスのメインスレッドが前記生産者スレッド及び消費者スレッドを開始し、且つ指定されたポートに、前記の前記スクリーンショットサービスを呼び出したアプリケーションとのセッション接続を確立するステップと、
前記生産者スレッドが前記セッション接続におけるデータ読み取り指示を監視することで、スクリーンショット命令の指示が受信されたことを確定するステップと、を更に含んでもよい。
【００９７】
さらに、前記消費者スレッドが前記スクリーンショット画像を、スクリーンショットサービスを呼び出したアプリケーションに返す処理においては、
前記消費者スレッドが前記セッション接続を介して前記スクリーンショット画像を、前記の前記スクリーンショットサービスを呼び出したアプリケーションに送信するステップを含んでもよい。
【００９８】
さらに、前記スクリーンショットサービスのメインスレッドには少なくとも１つの前記バッファ領域が設置されている。
【００９９】
さらに、前記生産者スレッドがキャプチャしたスクリーンデータをバッファ領域に書き込む処理においては、
前記生産者スレッドが、書き込み位置に応じて、キャプチャしたスクリーンデータをバッファ領域に書き込み、且つ前記バッファ領域のデータ長及び書き込み位置を更新するステップを含んでもよい。
【０１００】
さらに、前記消費者スレッドが前記バッファ領域から生産者スレッドの記憶したスクリーンデータを読み取る処理においては、
前記消費者スレッドが、読み取り位置に応じて、前記バッファ領域から生産者スレッドの記憶したスクリーンデータを読み取り、且つ前記バッファ領域のデータ長及び読み取り位置を更新するステップを含んでもよい。
【０１０１】
さらに、前記バッファ領域がリングバッファ領域であってもよい。
【０１０２】
上記実施形態の説明によれば、当業者は、本発明がソフトウェア、および必要な汎用ハードウェアにより実現されてもよく、勿論、ハードウェアにより実現されてもよいが、多くの場合、前者が好ましい実施形態であると明確に理解すべきである。このような理解に基づき、本発明の技術案は、実質的な部分、または従来技術を改良する部分をソフトウェア製品の形態で実現してもよい。当該コンピュータソフトウェア製品は、コンピュータ可読記憶媒体、例えばコンピュータのフロッピー（登録商標）ディスク、読み出し専用メモリ（Ｒｅａｄ−Ｏｎｌｙ  Ｍｅｍｏｒ：ＲＯＭ）、ランダムアクセスメモリ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ：ＲＡＭ）、フラッシュ（ＦＬＡＳＨ）、ハードディスクや光ディスクなどに記憶されてもよく、且つコンピュータ機器（パソコン、サーバ、またはネットワーク機器などであってもよく）に本発明の各実施例に係る方法を実行させるためのいくつかの命令を含んでいる。
【０１０３】
なお、上記の端末機器においてスクリーンショットサービスを提供するための装置の実施例では、含まれる各ユニット及びモジュールは単に機能ロジックに従って分割されているが、上記分割に限定されず、対応する機能を実現できればよい。また、各機能ユニットの具体的な名称は簡単に互いに区別しやすいためのものに過ぎず、本開示の保護範囲を限定するためのものではない。
【０１０４】
以上で説明したのは、本発明の具体的な実施形態のみであり、本発明の保護範囲は、これらに限定されるものではない。本技術分野をよく知っている当業者のいずれも、本発明に開示された技術範囲内に容易に想到できる変更または置換の全ては、本発明の保護範囲内に含まれるべきである。従って、本発明の保護範囲は、付いている特許請求の範囲を基準としているものである。
【図１】
0006377263.tif 000002
【図２】
0006377263.tif 000003
【図３】
0006377263.tif 000004
【図４】
0006377263.tif 000005
【図５】
0006377263.tif 000006