|
|
|||||||||||||||
![]() |
||||||||||||||||
|
||||||||||||||||
|
|
#2 |
|
Themenersteller
Registriert seit: 17.05.2005
Ort: in der Nähe von Köln
Beiträge: 2.052
|
Programm zur 5-Minuten-Belichtung
Hallo,
hier ist mein Programm, mit dem ich die RAW-Dateien voneinander subtrahiert habe. Es ist in COMAL geschrieben, einer "alten" Sprache, die aus BASIC und Pascal zusammengesetzt ist. Sicher gibt es Programmierer, die das in eine "moderne" Sprache übertragen und dann das Programm allen im Forum zur Verfügung stellen, mit Dateinamenseingabe .... Auf meinem 900MHz Computer braucht ein Durchlauf unter W98 2 1/2 Minuten. Viel Spaß beim Lesen! Stuessi 0010 // save "RAW-RAW1" 0020 // Programm von : "Stuessi" 0030 // Datum : 18.01.2006 0040 USE unidump 0050 OPEN FILE 1,"PICT2113.MRW",READ // Original RAW Datei file1 0060 OPEN FILE 2,"PICT2106.MRW",READ // Dunkelbild file2 wird abgezogen 0070 OPEN FILE 3,"PIC-2113.MRW",WRITE //neues RAW-Datei 0080 0090 DIM a$ OF 1, b$ OF 1, c$ OF 1 0100 DIM dwert1$ OF 3 0110 //die ersten 4 Byte werden von file1 nach file3 uebertragen 0120 FOR i:=1 TO 4 DO 0130 a$:=GET$(1,1) 0140 IF a$="" THEN a$:=CHR$(0) 0150 PRINT FILE 3: a$, 0160 ENDFOR i 0170 //die ersten 4 Byte werden von file2 gelesen 0180 FOR i:=1 TO 4 DO a$:=GET$(2,1) 0190 //offset von file2 lesen 0200 offset2:=0 0210 FOR i:=3 TO 0 STEP -1 DO 0220 a$:=GET$(2,1) 0230 IF a$="" THEN a$:=CHR$(0) 0240 offset2:=offset2+ORD(a$)*256^i 0250 ENDFOR i 0260 //offset von file1 lesen und Daten in file 3 schreiben 0270 offset1:=0 0280 FOR i:=3 TO 0 STEP -1 DO 0290 a$:=GET$(1,1) 0300 IF a$="" THEN a$:=CHR$(0) 0310 PRINT FILE 3: a$, 0320 offset1:=offset1+ORD(a$)*256^i 0330 ENDFOR i 0340 //an den Anfang der Daten von file2 gehen 0350 FOR i:=1 TO offset2 DO a$:=GET$(2,1) 0360 //Byte vor Bilddaten von file1 nach file3 kopieren 0370 FOR i:=1 TO offset1 DO 0380 a$:=GET$(1,1) 0390 IF a$="" THEN a$:=CHR$(0) 0400 PRINT FILE 3: a$, 0410 ENDFOR i 0420 zaehler1#:=8+offset1 0430 // 0440 pixel#:=2008*3016 DIV 2 0450 // 3 Byte lesen fuer 2 pixel 0460 FOR i:=1 TO pixel# DO 0470 zaehler1#:+2 0480 dwert1$:=""; dwert2$:="" 0490 FOR k:=1 TO 3 DO 0500 a$:=GET$(1,1); b$:=GET$(2,1) 0510 IF a$="" THEN a$:=CHR$(0) 0520 IF b$="" THEN b$:=CHR$(0) 0530 dwert1$:=dwert1$+a$; dwert2$:=dwert2$+b$ 0540 ENDFOR k 0550 0560 // aus drei 8-Bit-Werten werden zwei 12-bit-werte 0570 // file1 0580 wertfile1pix1#:=(ORD(dwert1$(1:1)))*16+(ORD(dwert1 $(2:2))) DIV 16 0590 wertfile1pix2#:=(ORD(dwert1$(2:2)) MOD 16)*256+ORD(dwert1$(3:3)) 0600 //file2 0610 wertfile2pix1#:=(ORD(dwert2$(1:1)))*16+(ORD(dwert2 $(2:2))) DIV 16 0620 wertfile2pix2#:=(ORD(dwert2$(2:2)) MOD 16)*256+ORD(dwert2$(3:3)) 0630 0640 //Daten-file2 von daten-file1 subtrahieren 0650 0660 wertfile3pix1#:=wertfile1pix1#-wertfile2pix1# 0670 IF wertfile3pix1#<0 THEN wertfile3pix1#:=0 0680 wertfile3pix2#:=wertfile1pix2#-wertfile2pix2# 0690 IF wertfile3pix2#<0 THEN wertfile3pix2#:=0 0700 0710 // aus zwei 12-Bit-Werten werden drei 8-Bit-werte 0720 // diese werden in file3 geschrieben 0730 0740 b1#:=wertfile3pix1# DIV 16 0750 PRINT FILE 3: CHR$(b1#), 0760 b2#:=(wertfile3pix1# MOD 16)*16+wertfile3pix2# DIV 256 0770 PRINT FILE 3: CHR$(b2#), 0780 b3#:=wertfile3pix2# MOD 256 0790 PRINT FILE 3: CHR$(b3#), 0800 ENDFOR i 0810 CLOSE FILE 2 0820 0830 // rest von file3 wird geschrieben 0840 0850 WHILE NOT EOF(1) DO 0860 a$:=GET$(1,1) 0870 zaehler#:+1 0880 IF a$="" THEN a$:=CHR$(0) 0890 PRINT FILE 3: a$, 0900 ENDWHILE 0910 CLOSE FILE 1 0920 CLOSE FILE 3 |
|
|
|
|
|