Mailing List Archive: 49091 messages
  • Home
  • Script library
  • AltME Archive
  • Mailing list
  • Articles Index
  • Site search

[REBOL] do %image.png

From: jasonic:panix at: 14-Nov-2001 14:47

do %image.png My objective is to implement a roundtrip toolkit with /Core and /View interfaces for embedding, extracting and running REBOL scripts embedded in images. Then the real fun can begin! I have made a little progess: A tiny hardcoded test is now working :-) buddha.png is a PNG image file with a REBOL script embedded in it. http://www.postcardscience/rebol/buddha.png I used TweakPNG (Win32only) to learn about PNG and inset my REBOL script. By design I insert a special keyword "REBOLscript" after the "tEXt" chunk to help parsing. Also, a special REBOL end of script marker ";EOF" at the end of test script itself. The helps parsing the REBOL script end from other data or padding in the PNG file. It takes about 6 seconds to store 29kb image file as a string on a 500Mhz PIII Win98se Vaio laptop. Lots of features and funtions to implement. But first I need some basic advice: Q1. How can I improve the time to load PNG into a rebol string? Q2. What other approach do you suggest than the one I am following? thanks for any feedback - Jason ======================== REBOL [ File: %buddha.r] ;download or read from http://www.postcardscience/rebol/buddha.png buddha: read/binary %buddha.png b: "" for i 1 length? buddha 1 [append b to-char buddha/:i] ; 7 seconds for 29Kb image on 500MhzPIII ; head b ; make sure we are at the beginning when debugging in REBOL shell search-key: "tEXtREBOLscript" ; better than just looking for "REBOL" header-key: "REBOL " ; space after REBOL should mean it's the header tail-key: ";EOF" ; by design, this marks end of REBBOl script ; later probably will want to include #!path-to-rebol and find those first b: find next b search-key ; start of our tEXt chunk containing REBOL script b: find next b header-key ; start of the script start-mark: length? b ; how many bytes to end of PNG file bend: find next b tail-key ; end of script end-mark: length? bend ; how many bytes to chop off script-length: start-mark - end-mark ; how many bytes to use of 'script script: "" for i 1 script-length 1 [append script b/:i] ; chop the end off so we have pure script write %buddha-script.r script ; save it to file do %buddha-script.r ; test it!