
No.2ベストアンサー
- 回答日時:
No.1の続きです。
書き込み文字数の都合です。
以下の関数を呼び出しますので、追加してください。
Function Deci(topnumber As Byte, lownumber As Byte) As Integer
Dim number As Integer
If &H80 > topnumber Then
number = topnumber * 256 + lownumber
Else
number = (topnumber - 255) * 256 + lownumber - 256
End If
Deci = number
End Function
No.1
- 回答日時:
私も、レーザープロジェクタ用のデータを作成するにあたり、同様の問題に取り組んだことがあります。
まず、フリーの「画像→ベクトルデータ変換ソフト」を探しました。
BMPからレーザープロジェクタの標準フォーマットとされる、ILDA形式のファイルを作成してくれるソフトです。
製作者の書き込み
http://www.photonlexicon.com/forums/showthread.p …
ダウンロード直リンク
http://www.xs4all.nl/~hobbybob/laser/Software/bm …
ただし、このままでは使用に耐えなかったので、いったんEXCELに読み込み、自動的に不要部分(直線上の余分な点)などを処理するマクロを用意しました。←時間が無かった&大量に処理したかった。
ILDAはバイナリファイルなので、恐らくあなたの使用目的には則していないと思います。
そこで以下に、ILDAをEXCELで読み込んだ時の入力部分のマクロをあげておきます。
現物ママですので、解析、改造して使用してください。
'初期化
Dim name As String
Dim InputFileName As String
Dim InputFn As Long
Dim buf() As Byte
Dim i As Long
Dim j As Long
'ファイル読み込み
'読み込むファイル
InputFileName = "D:\ILDA\test.ild"
Worksheets("操作テーブル").Cells(2, 3).Value = InputFileName
InputFn = FreeFile
Open InputFileName For Binary As #InputFn
ReDim buf(LOF(InputFn))
Get #InputFn, , buf
Close #InputFn
'データの展開
'ヘッダテーブル展開
Worksheets("ILDAデータテーブル").Select
'仕様
Cells(3, 1).Value = Chr(buf(0)) + Chr(buf(1)) + Chr(buf(2)) + Chr(buf(3))
'ファイル形式
Cells(3, 2).Value = CStr(buf(4)) + CStr(buf(5)) + CStr(buf(6)) + CStr(buf(7))
'フレーム名称
Cells(3, 3).Value = Chr(buf(8)) + Chr(buf(9)) + Chr(buf(10)) + Chr(buf(11)) + Chr(buf(12)) + Chr(buf(13)) + Chr(buf(14)) + Chr(buf(15))
'会社名
Cells(3, 4).Value = Chr(buf(16)) + Chr(buf(17)) + Chr(buf(18)) + Chr(buf(19)) + Chr(buf(20)) + Chr(buf(21)) + Chr(buf(22)) + Chr(buf(23))
'総ポイント数
Cells(3, 5).Value = CLng(buf(24) * 256 + buf(25))
'フレーム番号
Cells(3, 6).Value = CLng(buf(26) * 256 + buf(27))
'総フレーム数
Cells(3, 7).Value = CLng(buf(28) * 256 + buf(29))
'スキャナーヘッド番号
Cells(3, 8).Value = CInt(buf(30))
'予備
Cells(3, 9).Value = CInt(buf(31))
'データテーブル展開
For i = 1 To Cells(3, 5)
j = 6 * (i - 1)
'No.
Cells(3 + i - 1, 11).Value = i
'X座標
Cells(3 + i - 1, 12).Value = Deci(buf(32 + j), buf(33 + j))
'Y座標
Cells(3 + i - 1, 13).Value = Deci(buf(34 + j), buf(35 + j))
'ステータス
Cells(3 + i - 1, 14).Value = CLng(buf(36 + j))
'色情報
Cells(3 + i - 1, 15).Value = CLng(buf(37 + j))
Next
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Accessファイルを作成者以外は...
-
Accessのリンクテーブルのパス...
-
Accessのクエリでデータの入力...
-
Accessクエリーで両方のテーブ...
-
Power BI (Power Queryでのテー...
-
Excel側からAccessへデータをエ...
-
AccessのクエリをExc...
-
エクセル 横棒グラフのデータテ...
-
Access 旧データを新データに入...
-
ACCESSのサブフォームでの既定...
-
このリレーションシップを作成...
-
Excel→Accessへ貼り付けがおかしい
-
GETPIVOTDATAを使...
-
Excel 2019 のピボットテーブル...
-
Accessでテーブル名やクエリ名...
-
「直需」の意味を教えてください
-
エクセルVBAで5行目からオート...
-
Accessのフィールド数が255しか...
-
ACCESSのクエリで集計で、先頭...
-
Oracleのビュー作成時に「指定...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Accessクエリーで両方のテーブ...
-
Accessのクエリでデータの入力...
-
Accessファイルを作成者以外は...
-
Excel→Accessへ貼り付けがおかしい
-
Accessのリンクテーブルのパス...
-
AccessのクエリをExc...
-
AccessからExcelのデータを消す...
-
GETPIVOTDATAを使...
-
アクセスのコンボボックスのデ...
-
EXCEL データテーブルの数字を...
-
線の画像を座標数値化するソフ...
-
Access 旧データを新データに入...
-
Access ユニオンクエリ グル...
-
ACCESSデータを削除してしまい...
-
エクセル 横棒グラフのデータテ...
-
Accessのことで教えてください...
-
Accessでの併合のやり方
-
アクセスで複数のテーブルを結...
-
ExcelデータをAccessにてリンク...
-
Excel側からAccessへデータをエ...
おすすめ情報