本来白黒しか扱えないHyperCardでカラーを扱うためのXCMD(拡張コマンド)です。
高速ゲームに、ペイントツールに、視覚効果の再現に、単なるお遊びに、とにかく色々使えます。
最新版ダウンロードは http://hp.vector.co.jp/authors/VA019519/game.html よりどうぞ。
検索エンジンに引っかかるように、Webにもソースコード置いてあります。
http://hp.vector.co.jp/authors/VA019519/CODE/PgColorX.c.txt
HyperCard XCMD "PgColorX" can draw color pictures. It can use for sppedy game, paint tool, visual effect, and color animation on HyperCard. PgColorX and its source code are free softwares and freely distoributable.
印刷などしてお使い下さい。スクリプトを書くときに見ると便利です。
▼*の印がついた引数は省略可能です
▼port番号 port
0から127までの番号でバッファを表わします
また、"card"あるいは"cd"を指定すると、カードウィンドウを指定できます
ウィンドウの名前を指定することで、任意のウィンドウを指定できます
Installコマンド使用時のみ
・"direct"あるいは"dir"で直接カードウィンドウを指定します
・"cd buf"でカラー描画用バッファを指定します。
これは最後にカードウィンドウを描画した画像です。
Mixモードであれば白黒のカードピクチャなどと合成したものです。
・"pri"で白黒画像と合成していないカラーバッファを指定できます
・"cd alpha"でマスクを指定します
▼色指定<color>
RGBカラー、またはHTMLカラーで指定します
RGBカラーでは赤、緑、青の光の3原色の各レベルを0から65535の数値で表わします
HTMLカラーでは"#FFA030"のように、#の後に2桁の16進数3つで指定します
red = "65535,0,0" "#FF0000"
green = "0,65535,0" "#00FF00"
blue = "0,0,65535" "#0000FF"
white = "65535,65535,65535" "#FFFFFF"
black = "0,0,0" "#000000"
gray = "32767,32767,32767" "#808080"
出力先がバッファのとき中間色が使えます
"White","Red"のような色指定も一部対応しています。
▼転送モード<mode>
"copy" = 転送元そのまま(省略時はこれ)
"notCopy" = 転送元のネガポジ反転
"or" = RGBそれぞれで濃いほうの色が残ります
"notOr" = 転送元を反転した後"or"
"bic" = RGBそれぞれで同じ色なら白くなります。異なる色なら転送先が残ります
"notBic" = 異なる色なら白くなります。同じ色なら転送先が残ります
"xor" = 2度xor描画をすると元に戻る性質があります
"notXor" = "xor"のネガポジ反転版
「カラー専用」
"addOver" = RGBそれぞれで色を重ねて明るくなります。限界(=65535)を超えると、0に戻ります
"addPin" = RGBそれぞれで色を重ねて明るくなります。限界(=65535)以上にはなりません
"subOver":RGBそれぞれで色を重ねて暗くなります。限界(=0)より落ちると、65535に戻ります
"subPin":RGBそれぞれで色を重ねて暗くなります。限界(=0)以上に暗くはなりません
"adMax":RGBそれぞれで比較して薄い色が残ります
"adMin":RGBそれぞれで比較して濃い色が残ります
"blend":半透明
"transparent":白い部分(あるいはopColorで設定された色)は透明になります
"hilite":白い部分以外(あるいはopColorで設定された色以外)はハイライトカラーになります
「オプション」
"copy with dithering" = 縮小時にアンチエイリアスがかかります
▼補助カラー<opColor>
転送モードに"blend","addPin","subPin","copy","notCopy","or",notOr","transparent"のどれかを指定した場合のみ有効
"blend"の透過レベル、"addPin"のオフセット値、"subPin"のオフセット値、"copy"などの濃い色の下限値,"transparent"の透過色を設定できます
▼塗りパターン<color>の拡張機能
HyperCardのパターンパレットと同じパターンが使えます。
Paintコマンドや図形描画コマンドで有効です。
"#ffffff,#000000,pat22" --グレーパターン
2色を","でつないで、さらに"pat"+数字(1〜32)でパターンを指定します。
パターンパレットの左上が"pat1"で、そこから下に向かって1ずつ数字が増えます。
▼大文字と小文字の区別はしなくてもよいです
pgcolorx "pict","CaRD","zzz"
▼エラーはthe resultで受けます
PgColorX "New",0,"64,64"
if the result is not empty then answer the result
▼rectやlocのデータを渡す時に、式を含む事ができます
PgColorX "Paint","cd","blue","0,12+34,round(cd fld A),it"
▼バッファを作成
PgColorX "New",port,<size/rect>,<*depth>
depth:0(現在のモニタと同じ色数),1,4(16色),8(256色),16(32000色),32(1670万色),VRAM(現在のモニタと同じ色数でVRAM上に配置)
▼PICTを指定してバッファを作成
PgColorX "New",port,<PICT Name/ID>,<*depth>
指定した名前かIDのPICTリソースの大きさでバッファを作成し、PICTを描画します
▼マスク用白黒バッファを作成
PgColorX "NewMask",port,<size/rect>
※CopyMaskコマンドでマスクに使用します
▼アルファチャンネル用モノクロバッファを作成(PPC専用)
PgColorX "NewAlpha",port,<size/rect>
※CopyAlphaコマンドでアルファチャンネルに使用します
▼すべてのバッファを削除
PgColorX "Kill"
▼指定したバッファを削除
PgColorX "Kill",port
▼PICTリソースを描画
PgColorX "Pict",port,<PICT Name/ID>,<*topleft/rect/"original">
▼カラーアイコンを描画
PgColorX "Cicn",port,<cicn Name/ID>,<*topleft/rect>
▼モノクロアイコンを描画
PgColorX "Icon",port,<ICON Name/ID>,<*topleft/rect>,<*color>
▼色を塗る
PgColorX "Paint",port,<color>,<rect>,<*mode>,<*opColor>
▼文字列の描画
PgColorX "String",port,<text>,<color>,<topleft>,<*mode>,<*opColor>
▼文字列の描画(高機能版)
PgColorX "Text",port,<text>,<color>,<font>,size,<style>,<align>,<scroll(x,y)>,textHeight,<dontWrap>,<rect>,<*mode>,<*opColor>
▼文字列の描画(高機能版)のテキストの最大描画サイズを取得する
PgColorX "GetTextSize",port,<text>,<color>,<font>,size,<style>,<align>,<scroll(x,y)>,textHeight,<dontWrap>,<rect>
※the resultのitem 1に幅、item 2に高さが返ります
▼点を描く
PgColorX "SetPixel",port,<color>,<loc>,<*mode>,<*opColor>
▼直線を引く
PgColorX "Line",port,<color>,width,<startLoc>,<endLoc>,<*mode>,<*opColor>
▼長方形を描く
PgColorX "Rect",port,<*fillColor>,<*frameColor>,width,<rect>,<*mode>,<*opColor>
▼角の丸い長方形を描く
PgColorX "RoundRect",port,<*fillColor>,<*frameColor>,width,<rect>,<*mode>,<*opColor>
▼円(楕円)を描く
PgColorX "Oval",port,<*fillColor>,<*frameColor>,width,<rect>,<*mode>,<*opColor>
▼円弧を描く
PgColorX "Arc",port,<*fillColor>,<*frameColor>,<startAngle,endAngle>,width,<rect>,<*mode>,<*opColor>
▼多角形を描く
PgColorX "PolyAngle",port,polySides,<*fillColor>,<*frameColor>,startAngle,width,<rect>,<*mode>,<*opColor>
※Angleは90で直角。0の時は、時計でいえば3時の方向を向いていることに注意
▼任意の図形を描く
PgColorX "Polygon",port,<*fillColor>,<*frameColor>,width,<locをreturnでつないだもの>,<*mode>,<*opColor>
▼マスクの形をした図形を描画
PgColorX "PaintMask",転送元mask,転送先port,<fillColor>,<frameColor>,width,<*転送先rect>,<*mode>,<*opColor>
▼転送
PgColorX "CopyBits",転送元port,転送先port,<*転送元rect>,<*転送先topleft/rect>,<*mode>,<*opColor>
▼マスク付転送
PgColorX "CopyMask",転送元port,マスクport,転送先port,<*転送元rect>,<*マスクrect>,<*転送先topleft/rect>,<*mode>,<*opColor>
▼アルファチャンネル付転送
PgColorX "CopyAlpha",転送元port,アルファport,転送先port,<*転送元rect>,<*アルファrect>,<*転送先topleft/rect>
※転送元と転送先ともに16ビット以上の色深度のバッファでないと動作しません
※転送元と転送先のサイズが一致している必要があります
▼左右を反転して転送
PgColorX "FlipH",転送元port,転送先port,<*転送元rect>,<*転送先rect>,<*mode>,<*opColor>
▼上下を反転して転送
PgColorX "FlipV",転送元port,転送先port,<*転送元rect>,<*転送先rect>,<*mode>,<*opColor>
▼タイル状に並べて転送
PgColorX "Tiling",転送元port,転送先port,<*転送元rect>,<*転送先rect>,<*mode>,<*opColor>
▼ピクチャフォント転送
PgColorX "PicFont",転送元port,転送先port,<string>,<*転送先topLeft>,<*mode>,<*opColor>
▼ずらし転送
PgColorX "BrushCopyBits",転送元port,転送先port,<*転送元rect>,<*転送先topleft/rect>,ずらし量,<*mode>,<*opColor>
▼同色領域の取得(バケツツールの塗りつぶし用)
PgColorX "MakeFillMask",入力元port,出力先mask,<loc>
▼回転転送
PgColorX "Rotate",転送元port,転送先port,<*転送元rect>,<*転送元中心(使用不可)>,<*転送先中心>,<*clipRect>,回転角度,*横拡大率,*縦拡大率,<*mode>,<*opColor>
※拡大率は256で等倍、512で2倍
▼変形転送(PowerPC専用)
PgColorX "Distort",転送元port,転送先port,<*転送元rect/頂点×4>,<*転送先頂点×4>,<*clipRect>,<*mode>,<*opColor>
▼床面3D透視転送(PowerPC専用)
PgColorX "Floor",転送元port,転送先port,<*転送元rect/頂点×4>,<*転送先頂点×4>,<*clipRect>,<*mode>,<*opColor>
▼スプライトを設定
PgColorX "SetSprite",設定port,スプライト番号,スプライト文字,<*設定rect>,<*オフセットtopleft>,<*真のwidth>
▼スプライトの情報を取得
PgColorX "GetSprite",スプライト番号,スプライト文字
▼スプライトを表示
PgColorX "DrawSprite",転送先port,スプライト番号,スプライト文字,<*転送先rect/loc>,<*mode>,<*opColor>
▼スプライトをピクチャフォントとして表示
PgColorX "StringSprite",転送先port,スプライト番号,文字列,<*転送先rect/topleft>,<*mode>,<*opColor>
▼スイートを登録する
PgColorX "SetSuite",スイート番号,<line指定>,スイート文字列
※スイート文字列はPgColorXのコマンドを複数行並べた文字列
▼スイートを描画する
PgColorX "DrawSuite",転送先port,スイート番号,<*line指定>
▼バッファ/ウィンドウのある点のRGBカラー値を取得
PgColorX "GetPixel",port,<loc>
※the resultにRGBカラー値が返ります
※portにウィンドウを指定した場合、スクリーンに見えている色を取得します
▼バッファ/ウィンドウ中で最も似た色(の位置)を取得する
PgColorX "SeekColor",port,<color>
※the resultにカラー値の差分値と座標が返ります
▼バッファ/ウィンドウをPICT/xPicリソースに保存する
PgColorX "SavePICT",port,<*rect>,*リソースID,*リソース名
PgColorX "SavexPic",port,<*rect>,*リソースID,*リソース名
※ResEditで簡単に覗かれないようにxPicリソースに保存する事が出来ます
PICTコマンドの代わりにxPicコマンドで描画できます
▼バッファ/ウィンドウをマスク付きでPICT/xPicリソースに保存する
PgColorX "SaveMaskPICT",ベースport,マスクport,<*rect>,*リソースID,*リソース名
PgColorX "SaveMaskxPic",ベースport,マスクport,<*rect>,*リソースID,*リソース名
▼バッファ/ウィンドウをマスク付きでcicnリソースに保存する
PgColorX "SaveCicn",ベースport,*マスクport,<*rect>,*リソースID,*リソース名
▼バッファをクリップボードにコピーする
PgColorX "CopyPict",port,<*rect>
▼マスクを付けてクリップボードにコピーする
PgColorX "CopyMaskPict",*port,*mask,<*rect>,<*mode>
▼リージョンを付けてクリップボードにコピーする
PgColorX "CopyRegionPict",*port,*mask,<*rect>,<+mode>
▼クリップリージョン領域を付けてクリップボードにコピーする
PgColorX "CopyClipRegionPict",*port,*mask,<*rect>,<+mode>
▼クリップボードの画像をバッファ/ウィンドウに描画する
PgColorX "PastePict",port,<*rect/"original">
▼バッファ/ウィンドウのサイズを取得する
PgColorX "GetSize",port
※the resultにサイズが返ります
▼バッファ/ウィンドウの色深度を取得する
PgColorX "GetDepth",port
※the resultに色深度が返ります
▼マスクデータを囲む最小の矩形領域を取得する
PgColorX "GetBounds",mask
※the resultにrectが返ります
▼バッファ/ウィンドウのクリッピング矩型を設定する
PgColorX "ClipRect",port,<*rect>
▼バッファ/ウィンドウのForeColor,BackColorを設定する
PgColorX "ForeColor",port,<color>
PgColorX "BackColor",port,<color>
▼カラー画像の消去
PgColorX "Flash",port(ウィンドウのみ),<*rect>
※その他、カード移動やlock screen/unlock screenによってカラー画像を消去することが出来ます
▼GWorldPtrを取得する
PgColorX "GetGWorld",port
※the resultにGWorldPtrが返ります
▼GWorldPtrを設定する
PgColorX "SetGWorld",port(バッファのみ),GWorldPtr
▼消えないカラーを設定する
PgColorX "Install",<mix_mode>,<*depth>
※mix_modeはspeed,mix,blend,half,double,hide,offの7つ
※インストール後はportの指定に"direct","cd buf","sec","cd alpha"が使えます。
▼消えないカラーを破棄する
PgColorX "Uninstall"
▼タブレットを使用開始
PgColorX "OpenTablet"
▼タブレットの筆圧レベルを取得
PgColorX "TabletPressure"
※the resultに筆圧レベルが0-1024の範囲で返ってきます
▼デバッグモードを入/切する
PgColorX "Debug",<true/false>
※デバッグモードをtrueにすると、エラーの時にダイアログが出ます。
※PgColorX "Kill"するとデバッグモードはfalseになってしまいます
PgColorXの持っているウィンドウを制御できます。
初期状態ではwidth,heightともに0でhide状態になっています。
▼PgColorXウィンドウの基本的なプロパティ
show/hide window "PgColorX"
set topleft of window "PgColorX" to <width>
set width of window "PgColorX" to <width>
set height of window "PgColorX" to <height>
▼バッファの設定
set buffer of window "PgColorX" to <buffer番号>
▼カラーカーソルの設定(crsrリソースが必要)
set cursor of window "PgColorX" to <cursor>
▼マウスが押された/離された時のイベント
mouseDownInPicture "PgColorX"/mouseUpInPicture "PgColorX"
※close window "PgColorX"すると、PgColorX "Kill"したのと同じように
データが失われてしまいます。
※"CopyBits","CopyMask"命令では、<*転送元rect>や<*転送先topleft/rect>を複数のrectをreturnで繋いで一括転送することが可能。ちょっとだけ高速な転送になるかも。
※"Cicn","Icon"命令では、<cicn Name/ID>や<*topleft/rect>を複数returnで繋いで一括描画することが可能。
※"SetPixel"命令では、<loc>を複数returnで繋いで一括描画することが可能。
PgExportXを使えば、PgColorXで作った画像を外部ファイルに保存することができます。
QuickTimeを使用しているので、さまざまな画像形式に対応しています。
PICT, PNG, JPEG, TIFF, Photoshop, SGI, BMP, MacPaint, TARGA, QuickTime,Resourceの11種類の画像形式を指定できます。
ダイアログによるファイル保存場所指定とファイルパスでの指定が可能です。
PgImportXを使えば、画像ファイルを読み込んでPgColorXのバッファにすることができます。
QuickTimeを使用しているので、さまざまな画像形式に対応しています。
ダイアログによるファイル指定とファイルパスでの指定が可能です。
PgEffectX "Afin",転送元ポート, 転送先ポート, 転送元矩形, 転送元中心, 転送先中心, 拡大率, 傾き, 回転,転送モード,OpColor
画像の回転や変形をQuickTimeで行います。