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

マスク&落書きで遊ぶ

back


「落書きで遊ぶ」と「マスクで遊ぶ」の合体物でござる。


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




実行すると矩形がカーソルにくっついてくるので、好きなところでクリック。
画像がそこに表示されまする。
左マウスボタンをドラッグで画像の上にマスクを描きまする。
(赤いところが切り抜かれまする)
右マウスクリックで終了です。

ちょっとソースが長いけど全部選択してドゥ〜イットしてちょんまげ。

--------------------------------------------
| lineWidth srcFc srcRect fc fd pts lastPt nextPt minX minY maxX maxY mskRect mskFc dstRect dstFc distance sk |
"線の太さ"
lineWidth _ 10.
fd _ FormCanvas on: Display.
fc _ FormCanvas extent: Display extent.
fc fillColor: Color white.
pts _ OrderedCollection new.
"画像を読み込み表示する"
srcFc _ HTTPSocket
httpJpeg: 'http://www.languagegame.org:8080/zoo/uploads/popo.jpeg'.
srcRect _ Rectangle originFromUser: srcFc extent.
Sensor waitNoButton.
srcFc displayAt: srcRect origin.
"マスク画像を描く"
[Sensor yellowButtonPressed] whileFalse: [
	lastPt _ Sensor cursorPoint.
	pts add: lastPt.
	[Sensor redButtonPressed] whileTrue:[
		nextPt _ Sensor cursorPoint.
		nextPt = lastPt ifFalse:[
			fd line: lastPt to: nextPt width: lineWidth color: (Color red).
			fc line: (lastPt) to: (nextPt) width: lineWidth color: Color red.
			pts add: nextPt.
			lastPt _ nextPt]]].
"マスクの大きさのフォームを作ってマスク画像を転送"
minX _ pts inject: (pts at: 1) x into: [:m :p | m min: p x] .
minY _ pts inject: (pts at: 1) y into: [:m :p | m min: p y] .
maxX _ pts inject: 0 into: [:m :p | m max: p x] .
maxY _ pts inject: 0 into: [:m :p | m max: p y] .
mskRect _ ((minX@minY) corner: (maxX@maxY)) expandBy: lineWidth // 2.
mskFc _ FormCanvas extent: mskRect width @ mskRect height.
mskFc _ fc form copy: mskRect.
"転送先のフォームを作る"
dstRect _ srcRect intersect: mskRect.
dstFc _ FormCanvas extent: mskRect extent.
distance _ dstRect origin - srcRect origin.
dstFc _ srcFc form copy: (distance corner: dstRect extent + distance).
"BitBltでマスク処理"
(BitBlt current toForm: dstFc form) 
	copyForm: mskFc form
	to: (mskRect origin - dstRect origin)
	rule: Form and
	colorMap: (Bitmap with: 16rFFFFFFFF with: 0 ).
"スケッチモーフにする"
"Display restore."
sk _ SketchMorph withForm: dstFc form.
sk openInHand.

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






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







Link to this Page