'now the data from december1952.bmp are translated into ' december1952raw_1018_876.dat, 1018 cols, 876 rows.. read bit by bit, 1 = black, 0 = white '.asc = ascii visual representation #INCLUDE "c:\b\pb\winapi\win32api.inc" FUNCTION PBMAIN LOCAL f AS LONG LOCAL bmfh AS BITMAPFILEHEADER LOCAL bmih AS BITMAPINFOHEADER LOCAL b AS STRING LOCAL colors() AS LONG LOCAL i AS LONG LOCAL j AS LONG LOCAL ii AS LONG LOCAL jj AS LONG LOCAL pdat AS BYTE PTR LOCAL pdat1 AS BYTE PTR LOCAL pdat2 AS BYTE PTR LOCAL pdat3 AS BYTE PTR LOCAL pddat AS BYTE PTR LOCAL n AS BYTE LOCAL hw AS LONG DIALOG NEW 0, "working..", , , 200, 30 TO hw CONTROL ADD LABEL, hw, 1, "", 1,1, 150, 12 DIALOG SHOW MODELESS hw f = FREEFILE OPEN "december1952.bmp" FOR BINARY ACCESS READ LOCK WRITE AS f GET #f, ,bmfh b = "[FILEHEADER] b = b + STR$(bmfh.bfType) + $CRLF b = b + "size:" + STR$(bmfh.bfSize) + $CRLF b = b + "offBits:" + STR$(bmfh.bfOffBits) + $CRLF + $CRLF GET #f, ,bmih b = b + "[INFOHEADER]" + $CRLF b = b + "Size:" + STR$(bmih.biSize) + $CRLF b = b + "Width:" + STR$(bmih.biWidth) + $CRLF b = b + "Height:" + STR$(bmih.biHeight) + $CRLF b = b + "Compression:" + STR$(bmih.biCompression) + $CRLF 'BI_ flags from win32.api - 0 = no compression b = b + "Bitspp:" + STR$(bmih.biBitCount) + $CRLF b = b + "ClrUsed:" + STR$(bmih.biClrUsed) + $CRLF '*colors DIM colors(bmih.biClrUsed - 1) GET #f, , colors() FOR i = LBOUND(colors) TO UBOUND(colors) b = b + " " + STR$(i)+ ": " + HEX$(colors(i)) + $CRLF NEXT DIM dat(bmih.biHeight - 1) AS STRING * 508 'SPECIFIC for december1952.bmp DIM ddat(bmih.biHeight/4 - 1) AS STRING * 127 GET #f, , dat() CLOSE #f MSGBOX b EXIT FUNCTION b = "" FOR i = 0 TO UBOUND(dat) 'step 4 CONTROL SET TEXT hw, 1, STR$(i) + " / " + STR$(UBOUND(dat)) pdat = VARPTR(dat(i)) jj = 0 ' pddat = varptr(ddat(ii)) FOR j = 0 TO (509 * 8) - 1 STEP 4 IF ISFALSE j MOD 400 THEN DIALOG DOEVENTS IF ISFALSE BIT(@pdat, j) OR ISFALSE BIT(@pdat, j + 1) OR ISFALSE BIT(@pdat, j + 2) OR ISFALSE BIT(@pdat, j + 3) THEN BIT SET @pdat, jj ELSE BIT RESET @pdat, jj END IF INCR jj NEXT INCR ii NEXT DECR jj ii = 0 FOR i = 0 TO UBOUND(dat) STEP 4 CONTROL SET TEXT hw, 1, STR$(i) + " / " + STR$(UBOUND(dat)) pdat = VARPTR(dat(i)) pdat1 = VARPTR(dat(i + 1)) pdat2 = VARPTR(dat(i + 2)) pdat3 = VARPTR(dat(i + 3)) pddat = VARPTR(ddat(ii)) INCR ii FOR j = 0 TO jj STEP 8 IF ISFALSE j MOD 200 THEN DIALOG DOEVENTS @pddat = @pdat OR @pdat1 OR @pdat2 OR @pdat3 INCR pddat INCR pdat INCR pdat1 INCR pdat2 INCR pdat3 NEXT NEXT f = FREEFILE OPEN "december1952raw__.dat" FOR BINARY ACCESS WRITE LOCK WRITE AS f PUT #f,, ddat() CLOSE f f = FREEFILE OPEN "december1952dump.asc" FOR BINARY ACCESS WRITE LOCK WRITE AS f FOR i = 0 TO UBOUND(ddat) CONTROL SET TEXT hw, 1, STR$(i) + " / " + STR$(UBOUND(ddat)) pddat = VARPTR(ddat(i)) FOR j = 0 TO jj IF ISFALSE j MOD 200 THEN DIALOG DOEVENTS b = b + TRIM$(STR$(BIT(@pddat, j))) NEXT b = b+ $CRLF PUT #f,, b b = "" NEXT ' MSGBOX b CLOSE #f MSGBOX "done" END FUNCTION