|
|
|
High Dynamic Range Radiance Maps have been described by Paul Debevec.
The DC290 is a consumer-level digital camera with a built in interpreter for the Digita(tm) scripting language.
Taking several exposures at different shutter speeds is an ideal application for Digita. This script takes 17 exposures at a range of shutter speeds. You should make sure before you run this script that the camera has enough free space to hold 17 images. I get acceptable results using standard resolution (720x480) with "best" quality.
menu "Add-On Scripts"
name "High Dynamic Range"
label "High Dynamic Range"
mode 0
declare i:status
declare u:IPIP
declare u:uImageTaken, uImageAvail, uStorage
declare b: bSystem, bCapture, bVendor
declare i:shutter, speed
declare u:min_shut, max_shut, def_shut
declare t:ShutterList
declare s:Head
SetCaptureMode (still)
GetCapabilitiesRange("shut", min_shut, max_shut, def_shut)
uStorage = 1
IPIP = 0x10000000
ShutterList = "325,300,280,260,240,220,205,190,180,165, 90, 45, 22, 11, 6, 3, 2, 0"
status = 0
waitloop1:
GetCameraStatus (bSystem, bCapture, bVendor)
if bSystem & IPIP
Wait (1500)
goto waitloop1
end
# SetCameraState("aper", 800) # F8.0
SetCameraState("wmod", 11) # White balance off
SetCameraState("fmod", 3) # Manual focus
SetCameraState("fdst", 65535) # Focus at infinity
SetCameraState("xmod", 2) # Shutter priority
SetCameraState("xcmp", -300) # Reduce AE by 3 stops
SetCameraState("irev", 50) # Instant review 1/2 second
Wait (1000)
shutloop:
SubString(ShutterList, 0, 3, Head)
StringToNumber(Head, speed)
if speed == 0
goto done
end
shutter = 1000000 / speed
SetCameraState("shut", shutter)
StartCapture()
waitloop2:
GetCameraStatus (bSystem, bCapture, bVendor)
if bSystem & IPIP
Wait (500)
goto waitloop2
end
SubString(ShutterList, 4, 999, ShutterList)
goto shutloop
done:
exitscript
end