2009/12/26

いい加減シビレを切らせて・・・


・・・構築中なのデス! SIGMA RAW(FoveonX3Fファイル)の撮影情報連続取得スクリプト。
最新版は次のログで公開/更新中・・・ コチラのログは、スクリプト比較向けに放置w

因みに あの、X3Fって拡張子のファイル、厳密に云うと、JPEGで云うトコロのEXIFってのには準拠出来ていない。
なので、Windowsのエクスプローラで使うには結構不便を強いられる。

しかも、本家提供の現像アプリSIGMA PhotoPro3.xですら、
ファームウェア更新などで拡張されたプロパティ等を、完全に読み出せないと云う罠・・・
撮影したら即、必要な情報メモっておくか、カメラ(CF)にデータがあるウチ(端末へ転送してしまう前)に、
情報控えておかないと、管理できない・・・

そんなデジタルデータなんて、使い悪くて仕方ないんだが・・・(-_-;)


で、バイナリエディタでX3Fファイル覗いたら、なんか知らん、ファイルの先頭に全てあるではナイでsky♪
だったら、文字列解析で利用した、ADODBStreamで特定範囲を読み出すだけのほうが、
SPP使うよりアクセス時間短縮できる・・・  ってのは、随分前から考えていたのだが、
ソコはソレおきつねさまくおりてぃ、ダレかが作るだろうと永らく放置していたのだ!

・・・って、チョイと文字列の扱いが面倒だったので手を付けなかっただけなのだが、
此度は諦め、1日使って最適な呼び出し方など模索し、解決に至った。

以下スクリプトで単体動作可能だが、1ファイルずつドロップする体なので、使い勝手は良くない。
このレベルだと、SPPでやってるよりは マシンに負荷が掛からないってぇトコだけが利点な程度。
おきつねさますくりぷととしては、とてもクオリティを満たしているとは云い難い。
ツマり・・・


     アクマでテストな版デスから。


ってコトでw


明日 このコアに、連続ファイル/フォルダ投入/日時文字列化/iniローダ/日付バックアップ/html吐き出しなど、
今までのライブラリを そのまま適用したり、下記に内包させて最適化を図るなどして、
SPPと等価の文字列を連続したHTMLとして取得可能なスクリプトに仕上げる。
(ココに晒す写真や そのデータを手作業で並べるのが面倒になっただけw)


取り敢えずコアなどww

'***** ↓↓↓ScriptTitle↓↓↓ *********************************************************
' X3F ShootingInformationsReader
' - Created by LazwardFox -

'

' Update -------- ----
' Release
' Update
' βRelease
' αRelease 20091226 2150 単一ファイル取得版、データも内容のまま列挙。
' 日本語/最適化準備中。
' DevStart 20091226 1241

'***** ↓↓↓ ObjectDecralations ↓↓↓ *************************************************
Public My, Parameters, Fs, objADO ', MySh, objSMTP, objMx
Set My = WScript
With My
Set Parameters = .Arguments ' パラメーター取得
If Parameters.Count <= 0 Then ' パラメータなし起動の無効化
.Quit
End If

Set Fs = .CreateObject("Scripting.FileSystemObject")
Set objADO = CreateObject("ADODB.Stream")
'Set MySh = .CreateObject("WScript.Shell")
'Set objSMTP = .CreateObject("CDO.Message") ' SMTP Object
'Set objMx = .CreateObject("MSXML2.XMLHTTP") ' URL Check
End With

'***** ↓↓↓ Decralations ↓↓↓ *************************************************
'Public ThisScriptFull, ThisScript, Start
Const vbWq = """"

' Const - Letters
Dim vbWCrLf, vbTc, vbNullB
vbWCrLf = vbCrLf & vbCrLf
vbTc = vbTab & vbCrLf
vbNullB = chr(&h00)

' Const - Date/Times


'***** ↓↓↓ LocalDecralations ↓↓↓ *************************************************
'Dim rdSource, svRoot, edMove, eSource
'Dim arLog, arResult, strReport

'***** ↓↓↓MainRoutine↓↓↓ *********************************************************
'On Error Resume Next

X3FSIR Parameters(0),34

' Msgbox strResult,,"CreateTesters"

' ----- ExitProcess
Set Fs = Nothing
Set objADO = Nothing
My.Quit

'***** ↓↓↓Functions↓↓↓ *********************************************************
'------------------------------------
' X3F ShootingInformationsReader
' FoveonX3 RAWファイルから、撮影情報を文字列として取得する。

' - Created by LazwardFox -

' Fs、objADO

' Update
' Release
' βRelease
' αRelease 20091226 2150 単一ファイル取得版、データも内容のまま列挙。
' 日本語/最適化準備中。
' DevStart 20091226 1241

' X3FSIs (
' strTarget - X3Fファイル名を指定する。他の種類は無効。
' ,KeyCount - キー数を指定。
' )

Function X3FSIR(strTarget, KeyCount)
Dim Lc, sName, iADO, sADO, Pc, kPc, rByte, cResult, arResult, rUnits
Const strEx = "X3F"
Lc = (KeyCount * 2) - 1
If Fs.GetExtensionName(strtarget) = strEx Then
sName = Replace(strtarget,"." & strEx,".txt") ' < 暫定
Set iADO = objADO
With iADO
.Type = 1 ' - Binary
.Open
.LoadFromFile strTarget ' 対象ファイル
For Pc = 1 To 1100 Step 1
.Position = 527 + Pc
rByte = rByte & CStr(.Read(1))
Next
.Close
cResult = Replace(rByte,vbNullB & vbNullB & vbNullB & vbNullB & vbNullB, "")
cResult = Replace(cResult," ", "")
arResult = Split(cResult,vbNullB)
For Pc = 0 To Lc
rUnits = rUnits & arResult(Pc)
If kPc = 0 Then
rUnits = rUnits & ","
kPc = 1
Else
rUnits = rUnits & vbCrLf
kPc = 0
End If
Next
.Type = 2 ' - Text
.Charset = "_autodetect" ' "Shift_JIS" '"utf-8" '"utf-8" ' "Unicode"
.Open
.WriteText rUnits
.Position = 0
.SaveToFile sName, 2 ' < 暫定
.Close
End With
Set iADO = Nothing
End If
End Function



・・・SD14のX3Fファイルでしかテスト出来ないので、このままで同社他機種に対応できるかは不明。
ただ、メチャクチャ単純な処理しか使っていないので、各位で好き勝手改変して使ってもらうのもアリだろう。
メドイけど(^_^;)

0 件のコメント:

コメントを投稿