2011年11月22日 星期二

相機使用基本功

1. 曝光:無論是白是黑,全區平均測光的結果就是全部是灰的

因此像舞台這樣背景全黑的情況,-1 EV 再微調,雪地全白的情況,+1 EV。

通常以主體曝光正確為準。在舞台上要避免主角臉色慘白過曝。
人物在陰影下,增加亮度讓人有正確的亮度而放棄周圍讓他們過曝。
(此時還要注意陰影跟陽光色溫的不同,忘記調整會讓膚色灰暗平板)

在主體本身明暗變化差異很大的時候,可以考慮打開內建的 HDR 取得平衡。


2. 白平衡:設定的比燈光低溫,偏藍,反之偏橘

除了運用色溫調整,預設的場景色溫通常也能調整色彩偏移,可以加減藍色和綠色。用白紙自訂白平衡雖然顏色很準,但是就少了環境光帶來的或冷冽或溫暖的色溫了。

在複雜光源下需要補光的時候,可以將閃光燈用色溫片調整到比較接近環境光的色溫,這樣可以拍出色彩過渡自然的照片。或是反其道而行,在現場光不夠有特色的時候,用色溫片和閃光燈做為主要照明,讓背景更藍或是更橘來製造相片的情調。

夜拍時自訂白平衡可以製造不同氛圍,自動白平衡在黑夜下通常表現不佳。


3. 對焦:你比他聰明
大光圈人像攝影的時候,因為景深太淺所以中央對焦再移動構圖的方式會導致稍微脫焦,應將對焦點移至慣用構圖上眼睛的位置。

如果是能調整對焦框大小的對比式對焦,應將對焦框範圍調整到適當大小來幫助準焦判斷。以眼睛為例,只有黑眼珠就不如整顆眼睛帶睫毛來的好。線條、格子等也都是對焦時的好幫手。


4. 色彩調控:善用內建模式
一般而言,相機都會內建標準、艷麗、風景、人像等多種色彩模式,應加以好好善用。在微調方面,一般都是調整銳利和對比。在主體佔據畫面絕大多數空間的時候,可以將銳利度拉高較多。如果是拍攝風景的話就不適合拉高太多,因為遠處的東西只會佔據幾個像素,銳利化之後會楚河漢界分的過於清楚。

拍攝紅色、紫色,等主體的時候,要小心顏色過於飽和。尤其拉高對比通常也會拉高些微飽和度,在拍攝這種主體的時候,要適當降低飽和度。


5. 快門:凝結或是流動
拍照的人要有意識的控制光圈和快門。要凝結表情則快門快於1/250 sec以上會較為保險,降低到1/60 sec 配合經驗抓取動作頓點也可以提高微光之下的成功機率。手持拍攝則要記得安全快門的計算,約略可以用焦距的倒數作為心中的那把尺。防手震雖然可以提高成功的機率,但是快門一旦慢於1/10 sec 防手震也不太有用了。

因此,長焦距鏡頭應配合單腳架使用,因為單腳架的機動性遠高於三腳架。


6. 光圈:淺景深 = 長焦距、大光圈、近距離
光圈控制景深,拍攝風景時宜縮小光圈。但過度縮小光圈會因為繞射而降低畫質,風景宜以不同光圈多拍幾張。適當的放大光圈有助於虛化背景,但是像微距攝影會因為距離太近而景深太淺,應縮光圈取得適當景深。以人像而言,我習慣用 55mm/f2.0。


7. ISO:找到能忍受的上限
高 ISO 不僅僅帶來顆粒,也使得色彩變得較不飽和、以及紅綠偽色雜訊出現在照片的暗部。
應找到 JPEG 直出能接受的最高ISO、以及用raw拍攝並運用專業軟體轉檔、降噪後能接受的最高ISO。拍攝時應適時切換JPEG或是RAW。

個人以為,ISO的順位低於光圈和快門。些微的顆粒和色彩雜訊並不會毀了一張照片。但是快門速度不足導致的動作模糊、光圈開到 f1.4造成的景深過淺,卻有可能會是一張讓人後悔的照片。


8. 閃光燈:手動計算 GN 值
對於前景和背景用固定快門速度測光,快門速度以不快於同步速度為準。兩者以亮者的光圈為基準 (結果較小的光圈)。GN=距離 X 光圈,估計距離後算出需要的GN值,再根據此ISO、焦距下閃燈的最大出力,來設定出力調整。

舉例而言,用1/125 sec 測光,背景 f2.0  前景 f5.6,目測前景距離兩公尺。因此需要的 GN = 11,以最大出力GN=58的閃燈,調整出力至 11/58 ~ 1/4。

拍攝時,光圈控制前景亮度、快門控制背景亮度,微調至滿意為止。

2011年11月11日 星期五

Compile nec2c with MinGW64

There are two problems.

1. There's no sys/times.h in MinGW32 or MinGW64. We have to write it ourselves.
2. The default fprintf() does not handle 80-bit long double.

I reference the article HERE to solve the first problem.
Instead of out of cygwin, I pulled out the structure definition from Ubuntu /usr/x86_64-linux-gnu/sys/times.h
-------------------------------------------------------------------------------------
/* put these lines in the header file. */


struct tms
  {
    clock_t tms_utime; /* User CPU time.  */
    clock_t tms_stime; /* System CPU time.  */

    clock_t tms_cutime; /* User CPU time of dead children.  */
    clock_t tms_cstime; /* System CPU time of dead children.  */
  };

clock_t  times( struct tms *buffer );


-------------------------------------------------------------------------------------
/* and put these in one .c file you like. I chose misc.c */

clock_t  times( struct tms *buffer )
{

buffer->tms_utime         = clock();
buffer->tms_stime         = clock();
buffer->tms_cutime = clock();
buffer->tms_cstime = clock();

return clock();
}

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


The second one is easier to solve, HERE are two solutions.
I used the easy one. Put the following line  before include anything.

#define  __USE_MINGW_ANSI_STDIO 1

There are some minor problems.
I simply comment line 80, line 131 to 146 and line 1996 to 2023 in main.c.

That's it.