FreeType, FFmpeg, SDL, 图像处理软件, Mac OS X, Objective-C
http://antkillerfarm.github.io/
FreeType使用指南
FreeType是一套跨平臺的字體文件編程開發(fā)包。它的官網(wǎng)是www.freetype.org,你可以到這個網(wǎng)站獲得最新的源代碼。
網(wǎng)上的關(guān)于FreeType的文獻很多。寫得較好的有以下兩篇:
http://www.cppblog.com/wlwlxj/archive/2006/11/08/14843.aspx (文獻A)
這篇文章比較概括,且有demo,適合入門之用。
http://hi.baidu.com/guopeng717/blog/item/f371088287532a95f603a6db.html (文獻B)
這篇文章深入一些,但代碼片段不可運行,需要對FreeType有根底的才看的明白。
本著原創(chuàng)的精神,上面文獻提到過的,我不再復(fù)述,僅結(jié)合自己近來的研究,對一些關(guān)鍵點做一下說明。
1.編譯FreeType庫
由于我只用VC編過,所以這里只談VC編庫心得。這是我見到過的最友好的跨平臺庫,VS的工程文件都很齊全,不像其他的軟件庫往往只有make文件。而且FreeType庫中,不但有PC的工程,還有Wince的工程。這里唯一要注意的是,在VS2005或更高版本中,有時需要調(diào)整工程的參數(shù),以滿足VS不同版本之間的移植需要。
2.字符對齊
文獻A中的代碼,顯示單個字是沒有問題的,但顯示一排字尤其是數(shù)字符號時,就有問題了。雖然我們已經(jīng)使用了FT_Set_Char_Size或FT_Set_Pixel_Sizes設(shè)定了字模的大小,但返回的字模并不都是一樣大的。空白字符返回的字模,大小為0,逗號、句號返回的字模只有普通字的幾分之一。這時就需要用glyph->bitmap_left和glyph->bitmap_top來指定起始位置。(詳見文獻B)
3.文獻A勘誤
文獻A的代碼中
printf( " %d " , bitmap.buffer[i * bitmap.width + j] ? 1 : 0 );
是不準確的,應(yīng)該改為
printf( " %d " , bitmap.buffer[i * bitmap.pitch + j] ? 1 : 0 );
pitch指字模一行所占的字節(jié)數(shù),在ft_render_mode_normal模式(即256灰度模式)下,pitch的值和width的值相等。但在ft_render_mode_mono模式(即黑白模式)下,這兩個值一般就不等了。
黑白模式下,這句應(yīng)為
printf( " %d " , (bitmap.buffer[i * bitmap.pitch + (j>>3)]<<(j & 0x7 )) & 0x80 );
4.小尺寸字體
并不是所有的矢量字庫都包含小字體的,例如微軟的宋體就不支持小于20*20的字模,所以,使用小尺寸字體時,必須仔細選擇字庫。
FFmpeg
官網(wǎng) & 安裝
http://www.ffmpeg.org/
這是FFmpeg的官網(wǎng)。
值得注意的是,在官網(wǎng)的下載頁面默認下載的是源代碼。對于不需要源代碼的使用者來說,需要在左下角的“Get the Package”處,根據(jù)所用平臺選擇合適的安裝包。
安裝包分為三類:
1.Static。只有一個可以自解壓的exe文件。
2.Shared。相當于要用解壓工具來解壓的壓縮文件。
3.Dev。相關(guān)鏈接庫的的頭文件和鏈接文件。
一般沒有二次開發(fā)需要的話,下載Shared包是最佳的選擇。
工具的使用
Fabrice Bellard是我崇拜的一位高人。他除了發(fā)明ffmpeg之外,還是Qemu和TinyCC的作者和圓周率計算記錄的獲得者(2009)。
之前的想法,ffmpeg主要是一套編解碼框架,其本身的功能有限,需要進行二次開發(fā)方可使用。沒想到其實它自帶的程序,功能已經(jīng)相當強大了。
安裝包中包含三個命令行程序:
1.ffmpeg。編解碼工具。功能十分強大,使用它可以很輕松的改變視頻文件格式或者壓縮視頻文件。不過也因為視頻格式及編輯選項實在太多,以至于想給ffmpeg做一個好用且功能齊全的GUI外殼都不是件容易的事情。
2.ffplay。播放工具。
3.ffprobe。多媒體流分析工具。
教程
官方教程《FFmpeg Basics》,在CSDN可以下載到。但該書偏重于如何使用ffmpeg的命令行工具以及編解碼的基本流程。對于ffmpeg源代碼,以及如何使用ffmpeg做二次開發(fā)講的很少。
http://dranger.com/ffmpeg/
這篇文章是使用ffmpeg做二次開發(fā)的入門手冊,寫的不錯。特將要點翻譯摘錄如下:
ffmpeg常見用法
1.轉(zhuǎn)換視頻格式
ffmpeg -i src.avi des.mp4
2.轉(zhuǎn)換視頻的尺寸
ffmpeg -i src.mp4 -s 960x540 des.mp4
3.屏幕錄像
ffmpeg -f alsa -ac 2 -i pulse -f x11grab -r 30 -s 1024x768 -i :0.0 -acodec pcm_s16le -vcodec libx264 -preset ultrafast -crf 0 -threads 0 output.mkv
SDL
https://github.com/antkillerfarm/antkillerfarm_crazy/tree/master/HelloSDL
目前網(wǎng)上查到的中文教程,多是針對SDL v1.2的。至于SDL v2.0的例子,Github上已經(jīng)有不少了,可惜多是英文,查找起來還是不太方便。因此這里我也提供一個自己寫的SDL v2.0的Hello World代碼。可以用這個代碼確認SDL v2.0的環(huán)境搭建是否正確。
圖像處理軟件
GIMP
在linux下奮斗已經(jīng)快半個月了,今天處理公務(wù),需要處理一張圖片,于是想到了GIMP。大名鼎鼎的linux兩大GUI庫之一的GTK就是在GIMP開發(fā)的過程中做出來的。GIMP功能很強大,不過它的使用方法和windows自帶的畫筆還是有差異的。
1)畫直線:
先在直線的起點單擊,按住shift鍵然后點擊直線的 終點位置,這樣,你就可以獲得一條很直的線了。
2)截屏
文件->創(chuàng)建->屏幕截圖
Inkscape使用技巧
關(guān)于繪圖軟件的認識,我是從Windows 3.1自帶的“畫圖”開始的,那是1995年的事。到了1997年的時候,從雜志上知道了PhotoShop的大名,但是直到現(xiàn)在也從來沒用過。再后來到了2007年的時候,開始使用Paint .NET。這個軟件已經(jīng)支持圖層的概念,個人認為這是區(qū)分入門用戶和中級用戶的分水嶺。
到了2013年,隨著工作平臺轉(zhuǎn)向Ubuntu,開始接觸并使用GIMP,但用的也不多。
一次偶然的機會,看到國外的一個牛人用Word繪制iOS桌面圖標,從評論中才知道還有Illustrator這樣的矢量繪圖軟件。
最近打算做一個軟件,需要一組圖標,無奈網(wǎng)上一直找不到合用的。于是只好自己來,然后就接觸到了Inkscape。
以下就一些實用功能做一個備忘。這個備忘不能取代教程,僅是一種補充,自己也是找了好半天才弄清楚的。
1)畫正圓、正方形
如果直接用橢圓工具,很難畫出正圓來,這時可以按住Ctrl鍵,再調(diào)整大小的話,圓就是正圓了。同樣的方法,也可用Ctrl鍵,繪制正方形,以及旋轉(zhuǎn)特定的角度,例如45度。
2)旋轉(zhuǎn)
選擇圖形之后,點擊圖形,會出現(xiàn)調(diào)整大小的箭頭。再點擊一下就會出現(xiàn)旋轉(zhuǎn)的箭頭。
3)中心對齊
打開“圖形捕獲->捕獲對象中心”的功能之后,一但圖形移動到另一個圖形對象的中心時,屏幕上會出現(xiàn)相應(yīng)的文字提示,這時松開按鈕,圖形就被對齊到另一個對象的中心了。
4)組合圖形
有些圖形可以分解為若干個簡單圖形。例如一個圓環(huán)由內(nèi)圓和外圓組成。首先選中其中一個圓,按住Shift鍵后,再選中另一個圓。在菜單欄找到“Path->Difference”,這樣就做好了一個圓環(huán)。
5)扇形
首先畫一個圓,選中之后,點擊左側(cè)的“edit paths”工具的圖標。然后會出現(xiàn)三個控制點,其中兩個方形的控制點用于調(diào)整大小。選中其中的圓形控制點,并用左鍵拖動即可指定扇形的角度。這里需要注意拖動時鼠標所在的位置,當鼠標在圓內(nèi)時,畫出來的是弓形,否則,畫出來的是扇形。
ImageMagick
前面兩個工具是典型的“所見即所得”的圖形化工具,而ImageMagick是一個命令行工具。
通常來說圖形化工具操作簡單,效率也較高。但命令行工具也有其存在的價值,比如批處理。
假設(shè)需要批量處理10萬張圖片,如果沒有自動化腳本,純靠手工操作的話,絕對是一件囧事。
有的軟件如ACDSee,雖然有批量處理的功能,但使用前提就是打開文件夾,并選中所需處理的圖片。而打開一個有10萬張圖片的文件夾,是個非常耗時的操作,即使不使用縮略圖也是如此。在這樣的場合,命令行工具就有其存在的價值了。
我在之前的公司就遇到過這樣的情況:
有一次(2008年),美工部門需要處理一批10萬量級的圖片。操作很簡單,就是對每張圖片生成一個尺寸較小的縮略圖。但由于沒有稱手的工具,即使用ACDSee批量處理,半小時也只能處理1000張左右。整個工程預(yù)計耗時10天。而這樣任務(wù),大概每3個月就會進行一次。
于是,他們不得不求助技術(shù)部門提供解決辦法。當時我花了2天的時間,寫了一個批處理的圖像處理工具,然后耗時20分鐘處理完了所有的圖片。不過該工具基于.NET平臺,在Linux下無法使用。
而最近,我想將該軟件移植到Linux上,于是查找Linux平臺的圖像處理工具庫,找到了ImageMagick。僅花了半個小時,就編寫好批處理的Python腳本,解決了這個問題。
ImageMagick調(diào)整圖片尺寸的命令示例:
convert src.jpg -resize 50% des.jpg
Mac OS X
最近對iOS開發(fā)產(chǎn)生了興趣,于是準備在PC上搭建一個iOS的開發(fā)環(huán)境。
首先,我搜了一下在Linux上搭建相關(guān)環(huán)境的方法,搜到了一些結(jié)果。但歷史比較老,基本都是3、4年前的東西,就算搭好,也不見得有什么用。
于是,目標改為在PC上使用Virtual Box搭建Mac OS X虛擬機。目標版本為Mac OS X 10.10。
1.下載鏡像文件。
鏡像文件主要有dmg和iso兩種。前者必須在Mac OS X中才能執(zhí)行,而后者和其他OS鏡像差別不大。
2.boot
原版鏡像由于Apple的硬件檢測機制,并不能在PC上運行。這時就需要破解,這一步一般是在boot中做的。
可用的boot工具,早期有empireEFI、HackBoot。較新的有chameleon、Niresh。
Objective-C
環(huán)境搭建
PC上搭建Objective-C(以下簡稱OC)開發(fā)環(huán)境,主要借助GNUstep開源項目的成果。
以Ubuntu為例,步驟如下:
sudo apt-get install gnustep-devel libjpeg-dev libtiff5-dev gobjc-4.9
2.設(shè)置環(huán)境變量。
GNUSTEP_MAKEFILES=/usr/share/GNUstep/Makefiles
總結(jié)
以上是生活随笔為你收集整理的FreeType, FFmpeg, SDL, 图像处理软件, Mac OS X, Objective-C的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Jpeglib使用指南, 各种压缩包的压
- 下一篇: 大杂烩, 硬盘安装Linux