View this PageEdit this PageAttachments to this PageHistory of this PageHomeRecent ChangesSearch the SwikiHelp Guide

WarpBltで遊ぶ

back


WarpBltで遊ぶです。
BitBltと比べて何が違うのかは今のところ転送スピードとソースの設定の違いだけしか
おいらには解ってないんだけどね。ま、解ったとこまでをやってみるっす。

ソースコードを順番にドゥ〜イットしてみてください。
Alt + d ( Cmd + d )




■画面の一部を画面に転送

●画面の一部を画面の別の位置に転送
その前に、何もないと変化が解らないので画像をWebから読み込んで
画面に表示しておきましょう。

画像をWebから読み込むです。
--------------------------------------------
srcFc _ HTTPSocket httpJpeg: 'http://www.languagegame.org:8080/zoo/uploads/kame.jpeg'.
--------------------------------------------

うまくいったか、画面に読み込んだ画像を表示するです。
--------------------------------------------
srcFc displayAt: 0@0
--------------------------------------------


転送っす。

転送元はポイントで指定するってのがみそやね。
左上>左下>右下>右上の順に各ポイントを配列で設定でする。
これをゆがめたりするとおもろかったりするんですが・・・・。
転送先は矩形指定ですな。
--------------------------------------------
warp _ (WarpBlt toForm: Display)
	sourceForm: Display;
	combinationRule: Form over.
src _ {0@0. 0@100. 200@100. 200@0.}.
dest _ 100@100 corner: 300@200.
warp copyQuad: src toRect: dest.

--------------------------------------------

画面に表示されたものを消します。
--------------------------------------------
Display restore.
--------------------------------------------


●クリッピングしてみる
さっきやったように、画面に画像を表示します。
--------------------------------------------
srcFc displayAt: 0@0
--------------------------------------------


転送っす。
--------------------------------------------
warp _ (WarpBlt toForm: Display)
	clipRect: (0@0 extent: 200@200);
	sourceForm: Display;
	combinationRule: Form over.
src _ {0@0. 0@100. 200@100. 200@0.}.
dest _ 100@100 corner: 300@200.
warp copyQuad: src toRect: dest.

--------------------------------------------

画面に表示されたものを消します。
--------------------------------------------
Display restore.
--------------------------------------------




■フォームから画面に転送

●フォームから画面に転送する
さっきは画面の一部を切り取って転送したですがこんどはフォームから画面に画像を転送します。

さっきと違う別の画像にするです。
Webから読み込み表示。
--------------------------------------------
srcFc _ HTTPSocket httpJpeg: 'http://www.languagegame.org:8080/zoo/uploads/popo.jpeg'.
srcFc displayAt: 0@0
--------------------------------------------

画面に表示されたものを消します。
--------------------------------------------
Display restore.
--------------------------------------------


転送っす。
--------------------------------------------
warp _ (WarpBlt toForm: Display)
	sourceForm: srcFc;
	combinationRule: Form over.
src _ {0@0. 0@(srcFc height) . (srcFc width)@(srcFc height). (srcFc width)@0.}.
dst _ (100@100) extent: srcFc extent.
warp copyQuad: src toRect: dst.

--------------------------------------------

画面に表示されたものを消します。
--------------------------------------------
Display restore.
--------------------------------------------


●クリッピングしまする
--------------------------------------------
warp _ (WarpBlt toForm: Display)
	clipRect: (0@0 extent: 200@200);
	sourceForm: srcFc;
	combinationRule: Form over.
src _ {0@0. 0@(srcFc height) . (srcFc width)@(srcFc height). (srcFc width)@0.}.
dst _ (100@100) extent: srcFc extent.
warp copyQuad: src toRect: dst.

--------------------------------------------


画面に表示されたものを消します。
--------------------------------------------
Display restore.
--------------------------------------------




■スライドさせる

●画面の画像をスライドさせながら画面に転送する
--------------------------------------------
wb _ (WarpBlt toForm: Display)
	sourceForm: Display;
	combinationRule: Form over.
src _ {0@0. 0@100. 200@100. 200@0.}.
dst _ 0@0 corner: 200@100.
Display restoreAfter: [
	[Sensor anyButtonPressed] whileFalse: [
		wb copyQuad: src + Sensor cursorPoint toRect: dst
	]].

--------------------------------------------


●フォームの画像をスライドさせながら画面に転送する
(表示された矩形のそばまでマウスカーソルを近づけてみて下され)
--------------------------------------------
srcFc _ HTTPSocket httpJpeg: 'http://www.languagegame.org:8080/zoo/uploads/kame.jpeg'.
dst _ (0@0) extent: srcFc extent.
src _ {0@0. 0@(srcFc height) . (srcFc width)@(srcFc height). (srcFc width)@0.}.

wb _ (WarpBlt toForm: Display)
	clipRect: (100@100 extent: 50@50);
	sourceForm: srcFc form;
	combinationRule: Form over.
Display restoreAfter: [
	[Sensor anyButtonPressed] whileFalse: [
		wb copyQuad: src + Sensor cursorPoint - (200@200) toRect: dst
	]].

--------------------------------------------




■拡大・縮小する

●画面の画像を拡大・縮小させながら画面に転送する
--------------------------------------------
dst _ 100@100 extent: 200@200.
p0 _ dst center.
wb _ (WarpBlt toForm: Display)
	clipRect: dst;
	sourceForm: Display;
	combinationRule: Form over.
Display restoreAfter: [
	[Sensor anyButtonPressed] whileFalse: [
		cp _ Sensor cursorPoint.
		src _ (dst insetBy: cp - p0) innerCorners.
		wb copyQuad: src toRect: dst
		]].

--------------------------------------------


●フォームの画像を拡大・縮小しながら画面に転送する
--------------------------------------------
srcFc _ HTTPSocket httpJpeg: 'http://www.languagegame.org:8080/zoo/uploads/popo.jpeg'.
rect _ (0@0) extent: srcFc extent.

dst _ 100@100 extent: 200@200.
p0 _ Display center.
wb _ (WarpBlt toForm: Display)
	sourceForm: srcFc form;
	combinationRule: Form over.
src _ {0@0. 0@100. 200@100. 200@0.}.
Display restoreAfter: [
	[Sensor anyButtonPressed] whileFalse: [
		cp _ Sensor cursorPoint.
		s _ (rect insetBy: cp - p0) innerCorners.
		wb copyQuad: s toRect: dst
	]].

--------------------------------------------




■回転する

●画面の画像を回転させながら画面に転送する
--------------------------------------------
dst _ 100@100 extent: 200@200.
p0 _ Display center.
wb _ (WarpBlt toForm: Display)
	clipRect: dst;
	sourceForm: Display;
	combinationRule: Form over.
Display restoreAfter: [
	[Sensor anyButtonPressed] whileFalse: [
		cp _ Sensor cursorPoint.
		src _ dst innerCorners
			collect: [ :pt | pt rotateBy: (cp - p0) theta about: p0].
		wb copyQuad: src toRect: dst
	]].

--------------------------------------------


●フォームの画像を回転しながら画面に転送する
(表示された矩形を中心にマウスカーソルの動きに合わせて回転するです)
--------------------------------------------
srcFc _ HTTPSocket httpJpeg: 'http://www.languagegame.org:8080/zoo/uploads/taba.jpeg'.
rect _ (0@0) extent: srcFc extent.

dst _ 100@100 extent: 200@200.
p0 _ rect center.
wb _ (WarpBlt toForm: Display)
	clipRect: dst;
	sourceForm: srcFc form;
	combinationRule: Form over.
Display restoreAfter: [
	[Sensor anyButtonPressed] whileFalse: [
		cp _ Sensor cursorPoint.
		src _ rect innerCorners
			collect: [ :pt | pt rotateBy: (cp - p0) theta about: srcFc center].
		wb copyQuad: src toRect: dst
	]].

--------------------------------------------


■ぜひこれも試してちょんまげ。

●WarpBltクラスのクラスサンプル
理屈がわかるまでは転送画像をトレイルさせていると思ってたです。(笑)

--------------------------------------------
Display restoreAfter: [WarpBlt test1]
--------------------------------------------

--------------------------------------------
Display restoreAfter: [WarpBlt test3]
--------------------------------------------

--------------------------------------------
Display restoreAfter: [WarpBlt test4]
--------------------------------------------

--------------------------------------------
Display restoreAfter: [WarpBlt test5]
--------------------------------------------

--------------------------------------------
Display restoreAfter: [WarpBlt test12]
--------------------------------------------


●スターウォーズ
 これはおもろいよね!!
 転送元のポイントの位置設定の仕方が味噌でする。2番目と3番目。
 この部分ね!! ( src _ {-200@-100. -50@100. 50@100. 200@-100}. )

http://minnow.cc.gatech.edu/squeak/1085






下の入力ボックスに書き込んで”add to the page”ボタンで登録出来ます。
修正したい場合はページ左のアイコンの”edit”で出てくる画面で編集可能です。
ページ左のアイコンの”uploads”で画像(JPEG,GIF,PNG)のアップロードもできます。



Friday, 4 June 2004, 1:41:23 am
ちなみに「cellSize:」を使うと画像がスムーズになるみたいです。数値は1〜3だとか・・・・。--thoru
  • がーん、1〜3ってマジっすか?増やせば増やす程、縮小時の補間が綺麗になると思ってたのですが。。。--nanpiyo
    • 「WarpBlt」クラスのクラスメソッドの「rotate」のコメントに「an integer between 1 and 3」と書いてあったので・・・。まあ、おいら英語がダメなんで勘違いしてるかもですが。--thoru

Link to this Page