非戰之罪

更新於 發佈於 閱讀時間約 5 分鐘
寫程式最怕碰到的,就是信心滿滿地寫好程式後,發現結果不如預期,而且完全看不出問題出在哪裡。這種慘況可以分成兩種:一種是程式很長、很複雜,想要把心機很重,躲在幽暗深處的臭蟲給抓出來,即使有功能強大的除錯工具,都不是件簡單的事;另一種是程式沒幾行,一切看起來都很清楚正常,臭蟲根本沒地方躲藏,可是結果就是不對。不管是哪一種,最讓人傻眼翻白眼的是,焚膏繼晷、殫精竭慮地奮戰多時,搞到開始懷疑人生之後,卻赫然發現,根本沒有臭蟲!根本就不是程式的問題!
寫好畫fractal tree的程式之後,邊看著turtle在螢幕上畫圖邊在想:應該把畫圖的過程做成動畫才對,看著一棵樹慢慢長出來,應該會比只看最後的完成圖有趣多了。可惜turtle並沒有支援把畫面存成動畫的功能,只能另外想辦法。
要把fractal tree的生長過程做成動畫,最簡單的方式,就是用螢幕錄影軟體直接錄下來。不過這樣做的話,檔案會挺大的,而且如果放在網頁裡頭,還要靠播放器才能看。比較好的方式,應該是做成GIF檔,既輕巧又好處理,使用方式也可以比較多樣化。至於顏色方面,雖然GIF支援的顏色不多,不過fractal tree的顏色就只有黑、綠、紅,不會有失真的問題。想要這麼做,就得把畫面一張一張的塞進GIF檔。所以最關鍵的問題是:怎樣把畫面一張一張地擷取下來?
嘿!turtle有支援畫面存檔的功能耶!剛看到時,心想這就好辦了,可省去很多功夫。可是再仔細一看,心裡涼了半截,居然只能存成ps檔。想要用PIL這個module來處理ps檔,還得額外裝Ghostscript。這可不是個好主意,電腦裝了一堆不常用的東西,就好像房子塞滿了不常用的雜物,搞到後來整個亂七八糟,想整理都無從整理起。所以能不裝就不裝,應該有其他辦法。
網路爬文的結果,可以用PIL的ImageGrab.grab().crop((x0, y0, x1, y1))把左上角和右下角分別是(x0, y0)及(x1, y1)這個長方形的畫面擷取下來。程式就簡單的幾行而已:
screen = turtle.Screen()
cv = turtle.getcanvas()
x0, y0 = cv.winfo_rootx(), cv.winfo_rooty()
x1, y1 = x0+screen.window_width(), y0+screen.window_height()
img = ImageGrab.grab().crop((x0, y0, x1, y1))
程式是夠簡單的了,可是……為什麼擷取下來的畫面不是原先想的區域?那個長方形明顯框錯了範圍,而且框到的turtle畫面的部分,還有透明的效果,居然看得到原本應該被蓋住的Spyder畫面。
天啊!這究竟是怎麼回事?程式就這麼幾行,到底是哪裡的問題?莫非是搞錯那幾個設定長方形範圍參數的意思了?一堆問號啊!
要解決這個問題,當然就是在網路上找資料。不過在網路上爬文時,最讓人頭大的一點是,一大堆名詞攪和在一起,有時實在是很難分辨到底所指為何。最主要的原因,是因為turtle使用tkinter來當作畫圖的介面,所以網路上的討論文章,有些會把這兩個東西混雜在一起討論。糟糕的是,因為要擷取螢幕畫面,所以就必須清楚知道畫面的座標位置。這時候,就又牽涉到相對座標和絕對座標的問題。既然牽涉到座標,那就得先搞清楚screen、widget、window、canvas這些是指什麼東西,而winfo_rootx()、winfo_rootx()、winfo_x()、winfo_y()傳回來的,又是哪個東西的哪個座標……
爬文了幾天,費盡千辛萬苦,橫看、豎看、左看、右看,不管怎麼看,都看不出為什麼那個長方形會框錯範圍。這時候,心裡開始浮現是不是要使出最終極那一招的想法。這招絕對有效,只是效率奇差無比,而且就只能用那麼一次,下次當狀況改變時,就得又花上不少時間重新再來。
最終極那一招,招式簡單但有效,就像神鵰俠侶中的傻姑,面對武功高強的赤練仙子李莫愁,就只一支火叉呆板毫無變化的刺、刺、刺,便讓李莫愁左支右絀,幾十手變化全被封死,最後落荒而逃。那招就是:手動調整。慢慢地試、慢慢地調,直到那個長方形能準確框住要擷取的區域為止。
這終極的一招,施展起來實在是無聊透頂,頗讓人躊躇要不要這麼做,所以就在網路上東逛逛、西逛逛,實在是下不了決心。突然間,「咦?!莫非……」
火速調整Windows的設定,然後執行程式。居然……成功了!
天啊!原來這一切都是Windows的設定搞的鬼,程式根本就沒問題。因為現在電腦螢幕的解析度都很高,所以Windows的字體會變得非常小。這麼小的字體,如果不調整一下,實在是在虐待眼睛,所以習慣把Windows的「變更文字、應用程式與其他項目的大小」調大。把這個設定值調回建議的100%之後,就可以準確地擷取到需要的範圍了。以前在錄製螢幕畫面時,也曾因為這個原因,錄好的畫面都被切掉一塊,花了不少時間才搞清楚原因。因為時日已久,早就忘了這麼回事,沒想到現在居然又被同樣的設定問題整了一次。還好這次在使出終極一招之前,靈光乍現,發現了問題所在,免去了浪費大把時間做無聊事之苦。
這一切的一切,都跟程式無關,是非戰之罪啊!
為什麼會看到廣告
avatar-img
15會員
131內容數
寫點東西自娛娛人
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
ysf的沙龍 的其他內容
解決了Spyder和turtle之間的不合後,就來畫些漂亮迷人的fractal圖案,也順便練習一下recursive function的寫法。
龜兔賽跑,第一回合兔子因為太輕敵,在半路上呼呼大睡睡過頭,輸了比賽。 雖然輸了第一回合的比賽,不過兔子並沒有灰心喪志,牠記取教訓,買了個功能齊全的運動手錶來戴,睡覺前先定好鬧鐘時間,這樣就不怕睡過頭而輸了比賽。從此龜兔賽跑,兔子照樣在半路上睡覺補充體力,但再也沒有因為睡過頭而輸了比賽。
「學程式,數學要很好嗎?」這問題的答案其實很簡單,就是:Yes and no。
「天啊!這程式怎麼這麼醜!」瞪著螢幕上先前寫的程式,不禁從心底冒出這樣的一句話。
或許就如官網文件中所說的,lambda function就只是syntactic sugar而已,所以也就沒特別在意,直到在設計Game of Life的輸入介面時,因為需要用到,兜兜轉轉,費了好些功夫和時間,總算對它的用途和用法有比較完整的認識。
唉!這user可真難伺候啊~~~
解決了Spyder和turtle之間的不合後,就來畫些漂亮迷人的fractal圖案,也順便練習一下recursive function的寫法。
龜兔賽跑,第一回合兔子因為太輕敵,在半路上呼呼大睡睡過頭,輸了比賽。 雖然輸了第一回合的比賽,不過兔子並沒有灰心喪志,牠記取教訓,買了個功能齊全的運動手錶來戴,睡覺前先定好鬧鐘時間,這樣就不怕睡過頭而輸了比賽。從此龜兔賽跑,兔子照樣在半路上睡覺補充體力,但再也沒有因為睡過頭而輸了比賽。
「學程式,數學要很好嗎?」這問題的答案其實很簡單,就是:Yes and no。
「天啊!這程式怎麼這麼醜!」瞪著螢幕上先前寫的程式,不禁從心底冒出這樣的一句話。
或許就如官網文件中所說的,lambda function就只是syntactic sugar而已,所以也就沒特別在意,直到在設計Game of Life的輸入介面時,因為需要用到,兜兜轉轉,費了好些功夫和時間,總算對它的用途和用法有比較完整的認識。
唉!這user可真難伺候啊~~~
你可能也想看
Google News 追蹤
Thumbnail
現代社會跟以前不同了,人人都有一支手機,只要打開就可以獲得各種資訊。過去想要辦卡或是開戶就要跑一趟銀行,然而如今科技快速發展之下,金融App無聲無息地進到你生活中。但同樣的,每一家銀行都有自己的App時,我們又該如何選擇呢?(本文係由國泰世華銀行邀約) 今天我會用不同角度帶大家看這款國泰世華CUB
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
一款遊戲的開發,肯定伴隨大大小小的修改和調整。 創作者不能怕改。但問題是,改東西需要花時間。一些看似簡單的改動,背後程式邏輯可能要好幾天,甚至幾星期才能修正。 對於不懂程式的人,有時很難判斷東西好不好修。所以今天就來說一下,對程式來說什麼樣的修正會令我們頭痛呢?   先以一個草莓奶油蛋糕為例
Thumbnail
如戰場一般剪片 老實說剪輯一部動畫其實很費時,需要繪畫很多圖、挑選音樂、理順情節、上效果和字母、出片。更不用說如果要放yt前做好SEO和文案,然後趕上片。 這次我為了參加比賽頂硬上,把以前寫好的歌曲和素材,但沒有腳本下,邊剪邊上邊補畫圖。最終還是趕上了…現在差寫報名表,接著明天就要面對現實去
Thumbnail
這篇文章描述了作者從兼職開發轉為全職開發的過程,並分享了從混進學界指日可待的積極態度。作者也提及自己在專案製作與個人生活上的矛盾與感想,最後分享了專案管理和敏捷開發相關的文章與影片。
一開始,提德根本拿頹鼠毫無辦法。無論三人如何使勁拉扯,頹鼠總是會在那顆扁小的腦袋探出頭瞬間無力跌倒。 這當然並非他的本意。頹鼠的嘴唇發白、臉頰瘦削,手腳明顯乾癟……在那次巧遇後,他又瘦了不少。提德暫且不想追究頹鼠到底經歷了什麼,他一邊要求老是在抱怨的胎記衛兵閉嘴,一邊思索能救出頹鼠的好辦法。 「
還是這個不可能是SOP的開坑SOP。 靈感→開坑→設定→填坑→撰稿→校稿→完稿 溫馨提醒:勸世蚊出沒,怕損血者請退避三舍。 ❈   還記得當初那小火苗一般的靈光一閃嗎?它現在已經成形了,只差你細心餵養,成長茁壯。   在我們將靈感變成一個完整的劇情、完整的世界後,骨架就全部完成了。   
Thumbnail
說來慚愧,我對昆蟲有生理性的恐懼,而且有些昆蟲又不太看路,總會直接往人身上飛撲;我真的害怕,我真的想逃走,但是有時候如果無法逃走,我就只好攻擊他們了... 其中,讓我最深惡痛絕的就是阿強們,小強我還敢處理,遇到大強我CPU真的是直接癱瘓,太害怕了...;偏偏這些恐怖東西又防不勝防,無處不在,一直是
Thumbnail
進行故事創作時,建構世界觀是件耗費心神的事 ,為了畫出有趣的奇幻漫畫,我花了不少時間設計 (大部分都還沒在作品中登場)。設計時,我發現自己很容易陷入:這樣合理嗎?的問題螺旋之中。
Thumbnail
又稱橡皮鴨除錯法,是一種對於程式碼除錯(debug)的方法。
Thumbnail
這個作品就沒有小說甚麼的想法了,原本是想畫漩渦而已,但中間那部份我畫到煩了,就突然靈光一閃,把中間的部分改成眼睛;記得以前友人看到這作品時,還問我壓力是不是很大,但我自己是感覺沒有甚麼壓力啦~
Thumbnail
在著手開發一套程式時,會讓人覺得煩躁的考量點,其中一個讓人頭痛的,應該就是 UI 的設計跟串接了吧,究竟有沒有一個套件,能讓開發者能夠以一套語言,就能打遍天下呢?
Thumbnail
現代社會跟以前不同了,人人都有一支手機,只要打開就可以獲得各種資訊。過去想要辦卡或是開戶就要跑一趟銀行,然而如今科技快速發展之下,金融App無聲無息地進到你生活中。但同樣的,每一家銀行都有自己的App時,我們又該如何選擇呢?(本文係由國泰世華銀行邀約) 今天我會用不同角度帶大家看這款國泰世華CUB
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
一款遊戲的開發,肯定伴隨大大小小的修改和調整。 創作者不能怕改。但問題是,改東西需要花時間。一些看似簡單的改動,背後程式邏輯可能要好幾天,甚至幾星期才能修正。 對於不懂程式的人,有時很難判斷東西好不好修。所以今天就來說一下,對程式來說什麼樣的修正會令我們頭痛呢?   先以一個草莓奶油蛋糕為例
Thumbnail
如戰場一般剪片 老實說剪輯一部動畫其實很費時,需要繪畫很多圖、挑選音樂、理順情節、上效果和字母、出片。更不用說如果要放yt前做好SEO和文案,然後趕上片。 這次我為了參加比賽頂硬上,把以前寫好的歌曲和素材,但沒有腳本下,邊剪邊上邊補畫圖。最終還是趕上了…現在差寫報名表,接著明天就要面對現實去
Thumbnail
這篇文章描述了作者從兼職開發轉為全職開發的過程,並分享了從混進學界指日可待的積極態度。作者也提及自己在專案製作與個人生活上的矛盾與感想,最後分享了專案管理和敏捷開發相關的文章與影片。
一開始,提德根本拿頹鼠毫無辦法。無論三人如何使勁拉扯,頹鼠總是會在那顆扁小的腦袋探出頭瞬間無力跌倒。 這當然並非他的本意。頹鼠的嘴唇發白、臉頰瘦削,手腳明顯乾癟……在那次巧遇後,他又瘦了不少。提德暫且不想追究頹鼠到底經歷了什麼,他一邊要求老是在抱怨的胎記衛兵閉嘴,一邊思索能救出頹鼠的好辦法。 「
還是這個不可能是SOP的開坑SOP。 靈感→開坑→設定→填坑→撰稿→校稿→完稿 溫馨提醒:勸世蚊出沒,怕損血者請退避三舍。 ❈   還記得當初那小火苗一般的靈光一閃嗎?它現在已經成形了,只差你細心餵養,成長茁壯。   在我們將靈感變成一個完整的劇情、完整的世界後,骨架就全部完成了。   
Thumbnail
說來慚愧,我對昆蟲有生理性的恐懼,而且有些昆蟲又不太看路,總會直接往人身上飛撲;我真的害怕,我真的想逃走,但是有時候如果無法逃走,我就只好攻擊他們了... 其中,讓我最深惡痛絕的就是阿強們,小強我還敢處理,遇到大強我CPU真的是直接癱瘓,太害怕了...;偏偏這些恐怖東西又防不勝防,無處不在,一直是
Thumbnail
進行故事創作時,建構世界觀是件耗費心神的事 ,為了畫出有趣的奇幻漫畫,我花了不少時間設計 (大部分都還沒在作品中登場)。設計時,我發現自己很容易陷入:這樣合理嗎?的問題螺旋之中。
Thumbnail
又稱橡皮鴨除錯法,是一種對於程式碼除錯(debug)的方法。
Thumbnail
這個作品就沒有小說甚麼的想法了,原本是想畫漩渦而已,但中間那部份我畫到煩了,就突然靈光一閃,把中間的部分改成眼睛;記得以前友人看到這作品時,還問我壓力是不是很大,但我自己是感覺沒有甚麼壓力啦~
Thumbnail
在著手開發一套程式時,會讓人覺得煩躁的考量點,其中一個讓人頭痛的,應該就是 UI 的設計跟串接了吧,究竟有沒有一個套件,能讓開發者能夠以一套語言,就能打遍天下呢?