class RGBDisplay -- RGBディスプレイドライバ¶
RGBDisplay クラスは、STM32 LTDC(LCD-TFT)コントローラを介して24ビットパラレルRGB LCDを駆動します。LTDCは選択されたピクセルクロックでSDRAMにバックアップされたフレームバッファから直接ピクセルをストリーミングするため、CPUを介さずに高いリフレッシュレート(最大120 Hz)が可能です。
OpenMV Cam Pure Thermalでは、同じ24ビットパラレルバスがオンボードのTFP410 HDMIエンコーダにも接続されているため、そのHDMI出力もこのクラスを通じて駆動されます。display_on=False を使用すると、エンコーダへのピクセルクロック供給は続けつつ、オンボードLCDをブランク状態にできます。
パネル解像度は、display モジュールで定義された定数(QVGA、VGA、WVGA、HD、FHD など)を使って framesize で選択します。パネル固有の初期化シーケンスは controller キーワード引数を介して組み込まれます(例:ST7701ベースのパネル向けの ST7701)。バックライトの明るさはデフォルトでは単純なGPIOとして駆動されますが、backlight として DACBacklight / PWMBacklight を渡すこともできます。
フレームは image.Image を指定して write() を呼び出すことで表示されます。ドライバはRGB変換、スケーリング、ROI、パレット、向きの変換を内部的に処理します。
例 -- カメラ映像を480x272パネルに60 Hzでミラーリングする:
import csi
import display
import image
csi0 = csi.CSI()
csi0.reset()
csi0.pixformat(csi.RGB565)
csi0.framesize(csi.QVGA)
lcd = display.RGBDisplay(framesize=display.FHVGA, refresh=60)
while True:
lcd.write(csi0.snapshot(), hint=image.SCALE_ASPECT_KEEP)
コンストラクタ¶
- class display.RGBDisplay(framesize: int = display.FWVGA, refresh: int = 60, display_on: bool = True, triple_buffer: bool = True, portrait: bool = False, controller: object | None = None, backlight: object | None = None)¶
framesize標準でサポートされている解像度の1つ(displayモジュール定数を参照)。refresh画面のリフレッシュレートをヘルツ単位(30〜120)で設定します。これはRGB LCDのピクセルクロックを制御します。display_onローカルLCD出力を有効にします。OpenMV Cam Pure ThermalではFalseを渡してください。このボードの24ビットパラレルバスはオンボードLCDとTFP410 HDMIエンコーダの両方を駆動するため、これによりHDMIエンコーダへの供給を続けながらオンボードLCDをブランク状態に保てます。他のOpenMV Camでは共有シンクがないため、デフォルトのままで構いません。triple_bufferTrueの場合、ディスプレイサイズの3倍のRAMを消費する代わりに、画面更新がノンブロッキングになります。portraitframesizeの幅と高さを入れ替えます。controllerコントローラチップクラスのインスタンスを渡すと、ディスプレイと一緒に初期化されます。backlight使用するバックライトコントローラモジュールのインスタンスを渡します。デフォルトでは、バックライトはGPIOピンを介して制御されます。- clear(display_off: bool = False) None¶
LCD画面を黒にクリアします。
display_offTrueの場合、フレームバッファを黒にクリアする代わりにディスプレイのロジックをオフにします。多くのディスプレイはバックライトだけが点灯しているときは白く表示されるため、画面を確実に黒くするにはこの後でバックライトもオフにしてください。
- backlight(value: int | None = None) int¶
LCDバックライトの調光値を0(オフ)から100(オン)の範囲で設定します。引数を渡さない場合は現在のバックライト値を取得します。
コンストラクタに
DACBacklightまたはPWMBacklightコントローラが渡されていない限り、バックライトはGPIOピンとして制御され、0(オフ)から非ゼロ(オン)までしか変化しません。
- write(image: image.Image, x: int = 0, y: int = 0, x_scale: float = 1.0, y_scale: float = 1.0, roi: Tuple[int, int, int, int] | None = None, rgb_channel: int = -1, alpha: int = 255, color_palette: image.Image | None = None, alpha_palette: image.Image | None = None, hint: int = 0) None¶
左上隅が位置
x、yから始まるimageを表示します。画像オブジェクトの代わりにパス文字列を渡して、ディスクから画像を自動的に読み込ませることもできます。x_scaleは表示画像をx方向にどれだけスケーリングするかを制御します。この値が負の場合、画像は水平方向に反転されます。y_scaleが指定されていない場合は、アスペクト比を維持するためにx_scaleと一致します。y_scaleは表示画像をy方向にどれだけスケーリングするかを制御します。この値が負の場合、画像は垂直方向に反転されます(トリプルバッファリングが必要)。x_scaleが指定されていない場合は、アスペクト比を維持するためにy_scaleと一致します。roiは表示する画像の関心領域(ROI)を表す矩形タプル(x, y, w, h)です。rgb_channelはRGB565画像から抽出してグレースケールで描画するRGBチャンネル(0=R、1=G、2=B)です。-1はチャンネル抽出を無効にします。alphaは画像の不透明度を制御します。0(完全に透明/黒)から255(不透明)までです。color_paletteは入力画像のグレースケール値に対するカラールックアップテーブルとして使用される、合計256ピクセルのRGB565画像です。rgb_channel抽出の後に適用されます。パレット列挙型(例:image.PALETTE_RAINBOW)を指定することもできます。alpha_paletteは入力画像のグレースケール値に対するピクセルごとのアルファルックアップテーブルとして使用される、合計256ピクセルのGRAYSCALE画像です。rgb_channel抽出の後に適用されます。hintは以下のフラグの論理ORです:image.AREA:縮小時に最近傍法ではなくエリアスケーリングを使用します。image.BILINEAR:最近傍法ではなくバイリニアスケーリングを使用します。image.BICUBIC:最近傍法ではなくバイキュービックスケーリングを使用します。image.CENTER:画像をディスプレイの中央に配置します(スケーリング後に適用)。image.HMIRROR:画像を水平方向にミラーリングします。image.VFLIP:画像を垂直方向に反転します。image.TRANSPOSE:画像を転置します(x/yを入れ替え)。image.EXTRACT_RGB_CHANNEL_FIRST:スケーリングの前にrgb_channel抽出を行います。image.APPLY_COLOR_PALETTE_FIRST:スケーリングの前にcolor_paletteを適用します。image.SCALE_ASPECT_KEEP:画像をディスプレイ内に収まるようにスケーリングします。image.SCALE_ASPECT_EXPAND:画像をディスプレイいっぱいに表示するようにスケーリングします(クロッピング)。image.SCALE_ASPECT_IGNORE:画像をディスプレイいっぱいに表示するようにスケーリングします(引き伸ばし)。image.ROTATE_90:90度回転します(VFLIP | TRANSPOSE)。image.ROTATE_180:180度回転します(HMIRROR | VFLIP)。image.ROTATE_270:270度回転します(HMIRROR | TRANSPOSE)。