LEADTOOLSライブラリ

フレームを表示

このトピックは、非標準グレースケールディスプレイアダプタに描画を実装するためにLEADTOOLSでカスタムコールバックを使う方法を説明します。

概要:

いくつかのクラスが、カスタム描画を実装するためにあります。これらのクラスは、高度なグラフィックディスプレイで追加の機能にアクセスするために関数を描画しているシステムの一部をオーバーライドする機能を与えます。特に、グレースケールカラーで8ビットであるより多くのものを示すことができるディスプレイアダプタは、興味深いです。

これらの機能を利用するために、Leadtools.Drawing.RasterPaintCallbacksクラスを実装することができて、Leadtools.Drawing.RasterPaintProperties.PaintCallbacksのリストに、それを追加することができます。多数のグラフィックカードをサポートしたいアプリケーションは、アダプタごとにクラスを作成して、RasterImagePainter.PaintCallbacksリストにすべてを追加します。

アプリケーションを実行しているコンピュータが1人以上のモニターと1つ以上のディスプレイアダプタを備えているかもしれないので、リストは必要とされます。ユーザーはモニター間でウィンドウをドラッグできます。このため、システム内の表示アダプターと互換性のあるすべてのカスタムペイントオブジェクトをPaintCallbacksリストに入れなければなりません。または、リスト内に不要なコールバックがあることによるオーバーヘッドが低いため、サポートできるすべての表示アダプターをすべて追加します。

Leadtools.RasterImageオブジェクトが描画する必要があるときはいつでも、現在のディスプレイアダプタと互換性を持つ1つを見つけるまで、それはすべてのカスタムコールバックオブジェクトをためします。任意の互換性を持つオブジェクトを見つけないならば、それはデフォルトのGDI関数を用いて描画します。

RasterPaintCallbacksオブジェクトごとに、RasterImageは以下をします:

  1. RasterImagePaintCallbackFunction.IsCompatibleDCCallbackデリゲート関数を呼び出します。関数がtrue返るならば、それは描画を実装するそのオブジェクトを選択します、そして、それは手順2へ行きます。関数がfalseを返すならば、RasterImageオブジェクトはリストで次のRasterPaintCallbacksをためします。互換性を持つオブジェクトが見つけられないならば、描画は正常挙動にデフォルトでなります。
  2. 描画が開始する前に、一度RasterImagePaintCallbackFunction.PrePaintCallbackを呼び出します。アプリケーションは、メモリの割り当てと初期化を実行することができます。これは、オブジェクトが描画をするのに選ばれたという信号です。
  3. 必要に応じてすべての他のデリゲートを呼び出します。
  4. 仕上がりを描画した後に、RasterImagePaintCallbackFunction.PostPaintCallback delegateを呼び出します。

アプリケーションがIsCompatibleDCCallback delegateなしでリストにRasterPaintCallbacksオブジェクトを追加するならば、そのオブジェクトは常に描画を実行するのに用いられます。RasterImagePainter.PaintCallbacksリストの残りの項目は、問い合わせられません。

すべての描画コールバックは、同じもの(C++構文)に見えるデリゲートです:

Object^ MyCallback(RasterImage^ image, array<Object^>^Params)

パラメータはコールバックごとに様々で、Paramsパラメーターを通して渡されます。パラメータがコールバックごとに渡される情報のために、Leadtools.Drawing.RasterPaintProperties.PaintCallbacksトピックを参照します型。

パラメータは、読み取り目的だけのためです。後ろの情報を渡す必要があるコールバックは、戻り値を通してそうします。1つ以上の値が返される必要があるとき、クラスがこの目的のために(そのようなサンプルのためにRasterImagePaintCallbackFunction.GetDibInfoCallbackコールバックを参照します)使われます。

各々のコールバックを実装する必要はありません。1、2、3または必要とするのと同じくらい多くのコールバックを実装することができます。コールバックが提供されないならば、デフォルトの内部のコールバックが使われます。

最低限で、以下のコールバックを見なさなければなりません:

コールバック 目的/説明
IsCompatibleDCCallback HDCがディスプレイアダプタと互換性を持つかどうか調べます
GetDibInfoCallback LEADTOOLSにデバイスで期待されるデータの型を話します
StretchDIBitsCallback 実際の描画を実装します
ConvertLineCallback カラー変換をするために、内部のカラー変換が機能するかどうかは、十分でありません。最初に内部変換関数をためすことは、推薦されます
PrePaintCallback 現在の描画のために任意のメモリの割り当てまたは初期化を実行します
PostPaintCallback PrePaintCallbackで割り当てられたかもしれない任意のメモリを開放します

コールバックは、Leadtools.Drawing.RasterPaintCallbacks.SetCallback(Leadtools.Drawing.RasterImagePaintCallbackFunction、Leadtools.Drawing.PaintCallbackDelegate)を用いて、RasterPaintCallbacksオブジェクトに追加されます。それで、擬似コードはこのように見えるかもしれません:

/* Allocate and initialize the callback class */ myCallbacks = gcnew RasterPaintCallbacks(); myCallbacks->SetCallback(IsCompatibleDCCallback, myFunc1); myCallbacks->SetCallback(GetDibInfoCallback, myFunc2); /* Add the callbacks to the RasterImage object */ myRasterImage->RasterPaint->Add(myCallbacks);

通常、人はC++でコールバックを実装するかもしれなくて、それからC#またはVB.NETなどの他の言語からそのコールバッククラスを使用するかもしれません。それは、多くのディスプレイカードメーカーがC++プロジェクトから最も使いやすいC/C++解放を提供するからです。

注意:DCが処理する画面を必要とする若干の専門サードパーティー関数を呼び出さなければならないならば、LEADTOOLSディスプレイコントロール(Leadtools.WinForms.RasterImageViewer.DoubleBuffer)においてダブルバッファリングを無効にしなければなりません。NETはメモリDCに描画することによってダブルバッファリングを実装します、そして、特別なサードパーティー関数がメモリDCsで機能しないことは非常にありそうです。そう、それは推薦されます。そして、任意の問題を除くことを確認するために2重バッファ機能を無効にすることによって、開始します。一度ディスプレイ操作中のを取得したら、ダブルバッファリングを再び有効にすることができて、呼び出すサードパーティー関数が同様にメモリDCハンドルで機能するかどうか見ることができます。