FrontPage  ページ一覧  検索  更新履歴  RSS  ログイン

Psychlops Wiki - Image 差分

  • 最後の更新で追加された部分はこのように表示します。
  • 最後の更新で削除された部分はこのように表示します。

! 概要
一般にオフスクリーン、ビットマップと呼ばれる画像データを扱うクラスです。Figureとして扱うことができます。

!! 制限
* 本来は書き込み可能な対象の一種としてDrawableであるべきですが、書き込み機能の実装が完了していないため継承していません。
* Figureですが、Groupに登録する際はcache命令でキャッシュしないと、移動や回転できません。


! メソッド

!! 初期化

:Image():空のImageを作ります。使用するにはset(width, height)やload(filename)命令を使って実ビットマップを割り当ててる必要があります。
:Image(long width, long height):幅 width、高さ heightのビットマップを作成します。
:Image(Rectangle rectangle):rectangleと同じ大きさのビットマップを作成します。小数点以下の値は切り捨てられます。
:Image(char* filepath):
:Image(std\:\:string filepath):画像ファイルを読み込みます。詳細はloadと同じです。
:void set(long width, long height):空のImageに幅 width、高さ heightのビットマップを割り当てます。ビットマップ割り当て済みのImageにさらにこの命令を実行すると、例外を送出してプログラムが終了します。

:void load(char* filepath):
:void load(std\:\:string filepath):
:void save(char* filepath):
:void save(std\:\:string filepath):画像ファイルを読み込み/書き込みます。現在読み込めるファイル形式は[[PNG|http://www.libpng.org/pub/png/]]のみです。ファイル名の最後4文字は.pngである必要があります。ファイル名の最初に%APP%などの特別の記号をつけると、ファイルの置き場所を指定できます(File参照)。

{{syntax_highlight('cpp')}}
Image img;
img.load("%APP%natural_image1.png");


!! ImageのCanvasに対する描画
:Image& draw(Drawable &target = *Drawable::prime):
:void cache(DrawableWithCache &target = *DrawableWithCache::prime): 編集の終わったImageをVRAM上にキャッシュして高速に描画します。[[詳細ページ|(TechnicalNote) Image cache on VRAM]]をご覧ください。


!! Imageへの描画

現在のところ、Strokeを使って書くことはできません。バージョン1.2まではColorで指定した色がアルファ値を持っていた場合でも透明度計算はせず、単にそのColor各値を指定ピクセルに埋めるだけでした。1.3より、透明度が適用されるようになります。アルファ値だけを書き込みたい場合は、alpha関数をご使用ください。

:void clear(const Color &col=Color\:\:black):指定の色で塗りつぶします。デフォルトは黒です。この関数は、透明度は計算されずそのまま書き込まれます。
:void pix(int x, int y, const Color col):
:void pix(const Point &po, const Color col):点を描画します。
:void alpha(int x, int y, double alpha):基本的にはpixと同じですが、RGBAイメージのアルファチャネルに直接値を書き込みます。
:void rect(const Rectangle &rectangle, const Color col):各辺が水平・垂直な長方形を描画します。
:void line(double x1, double y1, double x2, double y2, const Color &col):
:void line(const Point &po1, const Point &po2, const Color &col):直線を描画します。端点は(x1, y1), (x2, y2)またはpo1, po2となります。
:void ellipse(const Rectangle &rect, const Color &col):指定長方形の内接楕円を描画します


!! 変換

:Canvas.to(Image, Rectangle):Canvas(画面上)に表示している画像内容をImageに転送します。詳細はCanvasクラスのリファレンスを参照ください。
:void from(Image &target):targetのイメージと同じものを自身に複製します。
:void from(const Matrix &gray):
:void from(const Matrix &r, const Matrix &g, const Matrix &b):
:void from(const Matrix &r, const Matrix &g, const Matrix &b, const Matrix &a):Matrixの各要素をピクセルの色値と解釈し、Imageに書き込みます。
:void to(Matrix &gray):
:void to(Matrix &r, Matrix &g, Matrix &b):
:void to(Matrix &r, Matrix &g, Matrix &b, Matrix &a):Imageの各ピクセルの色値をMatrixに書き出します。
:Image dup():
:Image duplicate():自身の複製を作成します。
:Image& convert(PixelComponentsCnt pixcompcntval):自身のGRAYSCALE / RGB / RGBAモードを変換します。

モードはImage::XXXXの形式で指定します。情報量の多いフォーマットから少ないフォーマットに変換すると、情報が欠落します。
* GRAY
* RGB
** GRAYに落とすと、赤チャンネル以外の情報が欠落します。色空間を考慮した無彩色変換をするわけではないことに注意してください。
** RGBAに上げた場合、アルファチャンネルは1.0(不透明)になります。
* RGBA
** GRAYに落とすと、赤チャンネル以外の情報が欠落します。色空間を考慮した無彩色変換をするわけではないことに注意してください。
** RGBに落とすと、アルファチャンネルの情報が欠落します。



!!座標取得

それぞれの関数名のとおりの長方形の情報を取得します。
例えば、getWidthなら長方形の幅を返します。

:double getWidth() const:
:double getHeight() const:
:Point getCenter() const:
:double getHcenter() const:
:double getVcenter() const:
:double getTop() const:
:double getLeft() const:
:double getBottom() const:
:double getRight() const:


!! 特殊関数

:float* getFloatPrt():
:unsigned char* getElementPtr():

:int getPixBytes():Number of bytes of a pixel
:int getLineBytes():Number of bytes of a line OpenGLの都合でImageの各行は4バイト境界にならぶようになっているため、Image::RGBで確保した場合には幅が4の倍数でない限りダミー領域が存在する。
:int getBitmapBytes():Number of bytes of the whole bitmap
:int getLineNumber():Array length of line
:int getElementNumber():Array length of the whole bitmap