Pixmap (クラス)
public final Pixmap {inherits {Map-of Pixel}}
インポート元: CURL.GUI.STANDARD. package 内で定義されています CURL.GRAPHICS.MAP.

Pixel の 2d 配列。

説明

Pixmap はイメージを表し、通常 Pixmap.from-url#factory を使用して Url からロードされます。ただし、Pixmap.default を使用して直接作成することもできます。
PixmapPixel を参照するには 2 つの方法があります。
  • 2d アドレス指定スキームを使用し、(x, y) 座標でピクスマップ内のピクセル原点の位置を指定します。
  • 1d アドレス指定スキームを使用し、単一インデックス値を指定します。これが可能なのは、Pixmap の内部には Pixel の 1d 配列があるためです。ピクセルには左から右にインデックスが付けられ、ピクスマップの原点から始まりその右下隅で終わります。メソッド Pixmap.get-offset および Pixmap.set-offset を使用して、1d 配列にアクセスできます。
    • 要素 0 は、(0, 0) のピクセル、つまりピクスマップの左上隅を参照します。
    • 要素 Pixmap.max-offset は、Pixmap の右下隅のピクセルを参照します。2d アドレス指定スキームでは、このピクセルは (Pixmap.max-xPixmap.max-y) です。
次の図は、アドレス指定スキームを示しています。Pixmap クラスは {Map-of Pixel} であることに注意してください。

注意事項

Pixmap で透過を使用するには、いくつかの点を考慮する必要があります。
まず、Pixmap は透過ピクセルを含んでいる必要があります。透過は、Pixel のアルファ チャネルを使用してエンコードされます。0 は完全透過を表し、最大アルファ値は完全不透明度を表します。(最大値は Pixel の作成に使用される Type によって決まります。たとえば、Pixel.from-float#factory の場合、最大値は 1.0 で、Pixel.from-uint8 の場合、最大値は 255 です。)
Pixmap.ignore-alpha?true の場合、アルファ チャネルは重要ではありません。—アルファ チャネルは無視されます。したがって、この値は false に設定する必要があります。イメージがロードされる場合、イメージに透過が含まれる場合は、この値は false に設定されます。その他の場合は、通常 true になります。したがって、透過を Pixmap に手動で追加する場合は、Pixmap.ignore-alpha? を常に false に設定することが推奨されます。(このフラグの false への設定に関連するパフォーマンス コストに常に注意してください。)
最後に、Renderer2d を使用して Pixmap をレンダリングする場合、Renderer2d は意図する結果を得るためには正しい DrawOperation を使用する必要があります。Renderer2d の既定の DrawOperation は、DrawOperation.mask であり、アルファ値が最大値の半分以上の場合にのみピクセルを描画します。部分的な透過性を得るには、DrawOperation.blend を使用する必要があります。ただし、一部のレンダラはこの操作をサポートしていません。目的に応じた正しいタイプのレンダラを取得する方法の詳細については、DrawOperation を参照してください。

コンストラクタ
clone-from:既存の Pixmap からクローンを作成します。
コンストラクタ public {Pixmap.clone-from source:Pixmap}
default:指定された幅および高さで、ピクスマップを作成します。
コンストラクタ public {Pixmap.default
width:int,
height:int,
ignore-alpha?:bool = false,
empty-value:Pixel = {Pixel.from-uint8 0, 0, 0, alpha = 0},
initial-value:Pixel = {Pixel.from-uint8 0, 0, 0, alpha = 0}
}
from-stream:ByteInputStream から Pixmap をロードします。
ファクトリ public {Pixmap.from-stream
bis:ByteInputStream,
mime-type:String,
pixel-count-limit:int = max-int
}:Pixmap
from-url:イメージ ファイルをロードして、それを記述する Pixmap を返します。
ファクトリ public {Pixmap.from-url url:Url}:Pixmap

プロパティ
ignore-alpha?:最適化の手段として、アルファ チャネルを無視できるかどうかを指定します。
フィールド public Pixmap.ignore-alpha?:bool
uniform?:Pixmap が均一の色を持つかどうかを示します。
アクセサ public final Pixmap.uniform?:bool
プロパティ 継承 Map-of: empty-value
プロパティ 継承 MapCommon: height, max-offset, max-x, max-y, modified?, size, width

メソッド
clone:Pixmap のクローンを作成します。
public sealed {Pixmap.clone}:Pixmap
distort:DisplacementMesh を使用して、指定された Pixmap またはそのクローンに Pixmap を歪めます。
public {Pixmap.distort
displacement-mesh:DisplacementMesh,
out:{Map-of Pixel} = {self.new-like-self}
}:Pixmap
new-like-self:新しい Pixmap を作成します。
public {Pixmap.new-like-self
width:int = self.width,
height:int = self.height,
empty-value:Pixel = self.empty-value,
initial-value:Pixel = empty-value
}:Pixmap
resample:リサンプル操作によって Pixmap をリサイズします。
public {Pixmap.resample
algorithm:PixmapResampleAlgorithm,
dst-width:int,
dst-height:int,
dst-x:int = 0,
dst-y:int = 0,
dst:#Pixmap = null,
src-x:int = 0,
src-y:int = 0,
src-width:int = self.width,
src-height:int = self.height
}:Pixmap
to-Pixel:Pixmap の平均色を表すピクセルを返します。
public final {Pixmap.to-Pixel
}:(pixel:Pixel, uniform?:bool)
メソッド 継承 Map-of: clear, copy-from, embed-clone, flip-horizontal, flip-horizontal-clone, flip-vertical, flip-vertical-clone, get, get-offset, pad-crop-clone, rotate-180-clone, rotate-270-clone, rotate-90-clone, safe-get, safe-set, set, set-offset, shift, shift-clone, transpose-clone
メソッド 継承 MapCommon: in-bounds?, release
メソッド 継承 Object: object-describe, object-describe-for-debugging, object-serialize



コンストラクタ詳細
clone-from (コンストラクタ)
public {Pixmap.clone-from source:Pixmap}

既存の Pixmap からクローンを作成します。

source: クローン化するオブジェクト。

説明

clone-from および clone は copy-on-write 構造を実装しています。つまり、マップ データは直ちにコピーされず、代わりに新しい Pixmap が元の Pixmap とデータを共有することになります。

ただし、マップの 1 つが変更される場合はデータをコピーする必要があります。マップの 1 つに書き込まれるとマップ データは実際にコピーされ、結果として変更はクローンに影響を与えません。

したがって、clone および clone-from は適正に動作します。マップをクローンしてから元のマップに書き込む場合、クローンは変更されません。ただし、copy-on-write クローンの特徴の利点により、かなり効率的に (メモリおよび速度の点で) マップを変更せずにクローンできます。


default (コンストラクタ)
public {Pixmap.default
width:int,
height:int,
ignore-alpha?:bool = false,
empty-value:Pixel = {Pixel.from-uint8 0, 0, 0, alpha = 0},
initial-value:Pixel = {Pixel.from-uint8 0, 0, 0, alpha = 0}
}

指定された幅および高さで、ピクスマップを作成します。

width, height: Pixel で示される Pixmap の幅および高さ。少なくとも 1x1 である必要があります。
ignore-alpha?: アルファ チャネルを無視するかどうかを指定します。true の場合、演算の中にはマスクが無視または破壊されるためにより高速に処理されるものがあります。
empty-value: ピクセルの位置に意味のある値がないことを示す値。この値は、パディングされるピクセルや境界外のピクセルに使用される値です。
initial-value: このPixmap のすべてのピクセルの初期値。

次のコード行は、アルファ チャネルを使用して透明の黒に初期化された 100x100 ピクセルのピクスマップを作成します。

{Pixmap 100, 100}


from-stream (ファクトリ)
public {Pixmap.from-stream
bis:ByteInputStream,
mime-type:String,
pixel-count-limit:int = max-int
}:Pixmap

ByteInputStream から Pixmap をロードします。

bis: Pixmap のロードされるべき ByteInputStream
mime-type: イメージの content-type。サポートされるイメージタイプのリストについては ImageData.from-stream#factory をご覧下さい。
pixel-count-limit: イメージが壊れている (または使用不可能である) と宣言する前にロードするピクセルの最大数。既定値は無限です。

注意事項

画像をロードできない場合に、例外をスローします。

戻り値

ロードされたイメージ ファイルを記述する Pixmap


from-url (ファクトリ)
public {Pixmap.from-url url:Url}:Pixmap

イメージ ファイルをロードして、それを記述する Pixmap を返します。

url: イメージの Urlurl プリミティブを呼び出すことにより Url を作成できます。

戻り値

ロードされたイメージ ファイルを記述する Pixmap

説明

イメージが 1 つ以上のフレームを持つ場合、最初のフレームが返されます。
サポートされるイメージのタイプの一覧は ImageData.from-url#factory をご覧下さい。

Pixmap を作成する簡単な例を次に示します。
{let pixmap:Pixmap=
    {Pixmap.from-url
        {url "your_filename.gif"}
    }
}

注意事項

画像をロードできない場合に、例外をスローします。



プロパティ詳細
ignore-alpha? (フィールド)
public Pixmap.ignore-alpha?:bool

最適化の手段として、アルファ チャネルを無視できるかどうかを指定します。



uniform? (アクセサ)
アクセサ public final Pixmap.uniform?:bool

Pixmap が均一の色を持つかどうかを示します。

戻り値

Pixmap が均一な色をもつ場合は true。 それ以外の場合は false





メソッド詳細
clone (メソッド)
public sealed {Pixmap.clone}:Pixmap

Pixmap のクローンを作成します。

戻り値

クローン。

オーバーライド

Pixmap のサブクラスには clone-from コンストラクタが必要で、これでデータを初期化する前に super.clone-from を呼び出します。

さらに、clone メソッドを定義する必要があります。このメソッドは元のオブジェクト (clone-from コンストラクタを使用) からクローン化した新しいオブジェクトを返します。

説明

clone-from および clone は copy-on-write 構造を実装しています。つまり、マップ データは直ちにコピーされず、代わりに新しい Pixmap が元の Pixmap とデータを共有することになります。

ただし、マップの 1 つが変更される場合はデータをコピーする必要があります。マップの 1 つに書き込まれるとマップ データは実際にコピーされ、結果として変更はクローンに影響を与えません。

したがって、clone および clone-from は適正に動作します。マップをクローンしてから元のマップに書き込む場合、クローンは変更されません。ただし、copy-on-write クローンの特徴の利点により、かなり効率的に (メモリおよび速度の点で) マップを変更せずにクローンできます。


distort (メソッド)
public {Pixmap.distort
displacement-mesh:DisplacementMesh,
out:{Map-of Pixel} = {self.new-like-self}
}:Pixmap

DisplacementMesh を使用して、指定された Pixmap またはそのクローンに Pixmap を歪めます。

displacement-mesh: 歪みパターンを指定する DisplacementMesh オブジェクト。
out: 歪める Pixmap。このオブジェクトと同じ型であることが必要です。out が指定されていない場合、このオブジェクトのクローンを作成して代わりにそれを歪めます。

戻り値

歪められた out オブジェクト。


new-like-self (メソッド)
public {Pixmap.new-like-self
width:int = self.width,
height:int = self.height,
empty-value:Pixel = self.empty-value,
initial-value:Pixel = empty-value
}:Pixmap

新しい Pixmap を作成します。

width, height: 新しいピクスマップの幅および高さ。
empty-value: パディングされるピクセルおよび境界外のピクセルに代入する値。
initial-value: 新しいピクスマップのすべてのピクセルの初期値。

戻り値

新しいピクスマップ。

説明

引数を指定しない場合、self と同じ寸法および empty-value を持つ新しいピクスマップが返され、新しいピクスマップのピクセルはすべてこの empty-value を参照します。


resample (メソッド)
public {Pixmap.resample
algorithm:PixmapResampleAlgorithm,
dst-width:int,
dst-height:int,
dst-x:int = 0,
dst-y:int = 0,
dst:#Pixmap = null,
src-x:int = 0,
src-y:int = 0,
src-width:int = self.width,
src-height:int = self.height
}:Pixmap

リサンプル操作によって Pixmap をリサイズします。

algorithm: 適用されるリサンプルアルゴリズム。アルゴリズムはパフォーマンスとクオリティーに著しく変化をもたらします。PixmapResampleAlgorithm を参照して下さい。
dst-width, dst-height: 生成された画像のサイズ。これらは正の値でなければなりません。そうでない場合例外がスローされます。null でない場合、dst は十分に大きな値でなければなりません。そうでない場合例外がスローされます。以下を参照して下さい。
dst-x, dst-y: dst に生成される画像を出力し始めるオフセット。正の値でなければなりません。dst が null でない場合、(dst-x + dst-width) は dst.width より小さくなければなりません。また、(dst-y + dst-height) は dst.height より小さくなければなりません。(dstnull の場合、十分な Pixmap のサイズが生成されます。) これらの条件のいずれも満たされない場合、例外がスローされます。
dst: リサンプル操作の結果を格納するオプションイメージです。null が指定されている場合は、サイズ (dst-x + dst-width) と (dst-y + dst-height) の Pixmap が作成されます。null ではない場合、指定したものが使用されます。 (指定されたリサンプル操作に対して、十分に大きなサイズが指定されていない場合、例外がスローされます。)
src-x, src-y, src-width, src-height: リサンプルされる Pixmap の一部の四角形。この四角形は完全に Pixmap の中になくてはなりません。すなわち、src-xsrc-y は正の値であり、(src-x + src-width) は self.width と同じかそれ以下で、(src-y + src-height) は self.height と同じかそれ以下でなければなりません。これらの条件が守られない場合は、例外がスローされます。

戻り値

結果の Pixmapdstnull の場合、この画像は (dst-x + dst-width, dst-y + dst-height) の 生成された Pixmap です。dst が null でない場合、dst オブジェクトと同じになります。


{def src-pixmap = {Pixmap.from-url {url "../images/chart-axis-age.gif"}}}
{def dst-graphic = {Fill}}
{let algorithm:#DropdownList}
{let dst-x-field:#TextField}
{let dst-y-field:#TextField}
{let dst-width-field:#TextField}
{let dst-height-field:#TextField}
{let dst-width-percent:#TextDisplay}
{let dst-height-percent:#TextDisplay}
{let src-x-field:#TextField}
{let src-y-field:#TextField}
{let src-width-field:#TextField}
{let src-height-field:#TextField}

{define-proc {update}:void
    def dst-x = {dst-x-field.value.to-int}
    def dst-y = {dst-y-field.value.to-int}
    def dst-width = {dst-width-field.value.to-int}
    def dst-height = {dst-height-field.value.to-int}
    set dst-width-percent.value =
        {format "(%.f%% of original)", 100.0 * dst-width / src-pixmap.width}
    set dst-height-percent.value =
        {format "(%.f%% of original)", 100.0 * dst-height / src-pixmap.height}

    || Create a dst with a defined background for demonstration of
    || non-zero dst-x or dst-y.
    def dst =
        {Pixmap
            dst-x + dst-width,
            dst-y + dst-height,
            initial-value = {Pixel.create 1, 1, 1}
        }
    {for-pixel p at x, y no-read in dst do
        {if {bit-and {bit-xor x, y}, 16} == 0 then
            set p = {Pixel.create .75, .75, .75}
        }
    }

    {src-pixmap.resample
        {PixmapResampleAlgorithm name = algorithm.value asa String},
        dst-width,
        dst-height,
        dst-x = dst-x,
        dst-y = dst-y,
        dst = dst,
        src-x = {src-x-field.value.to-int},
        src-y = {src-y-field.value.to-int},
        src-width = {src-width-field.value.to-int},
        src-height = {src-height-field.value.to-int}
    }

    set dst-graphic.background = dst
    set dst-graphic.width = dst.width * 1px
    set dst-graphic.height = dst.height * 1px
}

{def change-handler = {on ValueFinished do {update}}}

{set algorithm =
    {DropdownList
        "nearest",
        "linear",
        "average",
        "triangle",
        "hermite",
        "bell",
        "b-spline",
        "mitchell",
        "lanczos",
        value = "lanczos",
        change-handler
    }
}
{set dst-x-field = {TextField width = .8in, value = "0", change-handler}}
{set dst-y-field = {TextField width = .8in, value = "0", change-handler}}
{set dst-width-field =
    {TextField
        width = .8in, value = {format "%d", src-pixmap.width div 4}, change-handler
    }
}
{set dst-height-field =
    {TextField
        width = .8in, value = {format "%d", src-pixmap.height div 4}, change-handler
    }
}
{set dst-width-percent = {TextDisplay width = 1in}}
{set dst-height-percent = {TextDisplay width = 1in}}
{set src-x-field = {TextField width = .8in, value = "0", change-handler}}
{set src-y-field = {TextField width = .8in, value = "0", change-handler}}
{set src-width-field =
    {TextField
        width = .8in, value = {format "%d", src-pixmap.width}, change-handler
    }
}
{set src-height-field =
    {TextField
        width = .8in, value = {format "%d", src-pixmap.height}, change-handler
    }
}

{update}

Result:

{Frame dst-graphic}

Parameters:

{Table
    cell-border-width = 1pt,
    cell-border-color = "silver",
    cell-border-style = "sunken",
    {row-prototype "algorithm", algorithm},
    {row-prototype "dst-width", {spaced-hbox dst-width-field, dst-width-percent}},
    {row-prototype "dst-height", {spaced-hbox  dst-height-field, dst-height-percent}},
    {row-prototype "dst-x", dst-x-field},
    {row-prototype "dst-y", dst-y-field},
    {row-prototype "src-x", src-x-field},
    {row-prototype "src-y", src-y-field},
    {row-prototype "src-width", src-width-field},
    {row-prototype "src-height", src-height-field}
}
導入: バージョン 7.0


to-Pixel (メソッド)
public final {Pixmap.to-Pixel
}:(pixel:Pixel, uniform?:bool)

Pixmap の平均色を表すピクセルを返します。

戻り値

注意事項

このメソッドは時間がかかります。