Making High Dynamic Range (HDR) Images with the Kodak DC290

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