screen shots?

If you have questions about any aspect of QBasic programming, or would like to help fellow programmers solve their problems, check out this board!

Moderators: Pete, Mods

Post Reply
iamdenteddisk
Veteran
Posts: 185
Joined: Mon Jun 30, 2008 4:10 pm

screen shots?

Post by iamdenteddisk »

is ther one program available that can do screenshots in both Qb enviroments and in run enviroments it also be cool if it worked with windos xp programs too

the idea of using it for tutorials and doing ad's for my programs in website post would be cool..
User avatar
Kiyotewolf
Veteran
Posts: 96
Joined: Tue Apr 01, 2008 11:38 pm

search cd_textfiles bbs ftp site

Post by Kiyotewolf »

Search the graphics tools programs in the cd.textfiles site for screen capture programs, for DOS only, (which also works under DOSBOX.)

DOSBOX is very very handy because it lets you install TSR programs to do things like capture screens, while running under the Windows environment.

For Windows, just ALT-PrtScrn, or use a paint program that has a screen capture utility built in.

Kiyote!
Banana phone! We need more lemon pledge. * exploding fist of iced tea! * I see your psycho cat and counter with a duck that has a broken leg, in a cast.
iamdenteddisk
Veteran
Posts: 185
Joined: Mon Jun 30, 2008 4:10 pm

ty

Post by iamdenteddisk »

thanks!
User avatar
burger2227
Veteran
Posts: 2466
Joined: Mon Aug 21, 2006 12:40 am
Location: Pittsburgh, PA

Post by burger2227 »

Here are QB SUBs for Eight Bit (screen 13) or Four Bit (Screen 12):

Code: Select all

'**************************************************************
  '
  '----- BITMAP.BAS ---------------------------------------------
  '
  '----- Creates Windows bitmaps out of SCREEN 12/13 images -----
  '----- Windows bitmap file structure courtesy WOTSIT.ORG ------
  '--------- Freeware by Bob Seguin 2003 -- (TheBOB) ------------
  '
  '---- Decreased time of 4 bit fullscreen to 8 seconds ---------
  '               Ted Weissgerber July, 2008
  '- Add a special keypress to a program to create a Screenshot -
  '
  '**************************************************************
  

  DECLARE SUB FourBIT (x1%, y1%, x2%, y2%, Filename$)  '12 or 13 using 16 colors
  DECLARE SUB EightBIT (x1%, y1%, x2%, y2%, Filename$) '13 using 256 colors

  '******************* DEMO or your own program code ********************

  'Demonstrates CALLs to SUB programs (can make a screen shot of any program)
  'Maximum width value for x2% = 639 in Screen 12 or 319 in Screen 13
  'Maximum depth value for y2% = 479 in Screen 12 or 199 in Screen 13
  'Minimums for x1% and y1% can be no less than 0

  DO: CLS
  INPUT "ENTER Screen Mode 12 or 13 (0 quits): ", scrn%
  IF scrn% = 13 THEN
    SCREEN 13               '8 bit (256 colors) only
    LINE (0, 0)-(319, 199), 13, BF
    CIRCLE (160, 100), 50, 11
    PAINT STEP(0, 0), 9, 11
    Start! = TIMER
    EightBIT 0, 0, 319, 199, "Purple8"
  ELSEIF scrn% = 12 THEN
    SCREEN 12                 '4 bit(16 colors) only
    LINE (0, 0)-(639, 479), 13, BF
    LINE (100, 100)-(500, 400), 12, BF
    CIRCLE (320, 240), 100, 11
    PAINT STEP(0, 0), 9, 11
    Start! = TIMER
    FourBIT 0, 0, 639, 479, "Purple4"  '469, 239
  ELSE : SYSTEM
  END IF

  Finish! = TIMER
  PRINT "Elapsed time ="; Finish! - Start!; "secs."; "Press Escape to quit!"
  DO: K$ = INKEY$: LOOP UNTIL K$ <> ""
  LOOP UNTIL K$ = CHR$(27)
  SYSTEM
  '******************************** End DEMO code ************************

  SUB EightBIT (x1%, y1%, x2%, y2%, Filename$)   'SCREEN 13 bitmap maker
                                                 'takes 1 second fullscreen
  DIM FileCOLORS%(1 TO 768)
  DIM Colors8%(255)

  IF INSTR(Filename$, ".BMP") = 0 THEN
    Filename$ = RTRIM$(LEFT$(Filename$, 8)) + ".BMP"
  END IF

  FileTYPE$ = "BM"
  Reserved1% = 0
  Reserved2% = 0
  OffsetBITS& = 1078
  InfoHEADER& = 40
  PictureWIDTH& = x2% - x1% + 1
  PictureDEPTH& = y2% - y1% + 1
  NumPLANES% = 1
  BPP% = 8
  Compression& = 0
  WidthPELS& = 3780
  DepthPELS& = 3780
  NumCOLORS& = 256

  IF PictureWIDTH& MOD 4 <> 0 THEN
  ZeroPAD$ = SPACE$(4 - PictureWIDTH& MOD 4)
  END IF

  ImageSIZE& = (PictureWIDTH& + LEN(ZeroPAD$)) * PictureDEPTH&
  FileSize& = ImageSIZE& + OffsetBITS&

  OUT &H3C7, 0
  FOR n = 1 TO 768 STEP 3
    FileCOLORS%(n) = INP(&H3C9)
    FileCOLORS%(n + 1) = INP(&H3C9)
    FileCOLORS%(n + 2) = INP(&H3C9)
  NEXT n

  OPEN Filename$ FOR BINARY AS #1

  PUT #1, , FileTYPE$
  PUT #1, , FileSize&
  PUT #1, , Reserved1% 'should be zero
  PUT #1, , Reserved2% 'should be zero
  PUT #1, , OffsetBITS&
  PUT #1, , InfoHEADER&
  PUT #1, , PictureWIDTH&
  PUT #1, , PictureDEPTH&
  PUT #1, , NumPLANES%
  PUT #1, , BPP%
  PUT #1, , Compression&
  PUT #1, , ImageSIZE&
  PUT #1, , WidthPELS&
  PUT #1, , DepthPELS&
  PUT #1, , NumCOLORS&
  PUT #1, , SigCOLORS&     '51 to 54

  u$ = " "
  FOR n% = 1 TO 768 STEP 3  'PUT as BGR order colors
    Colr$ = CHR$(FileCOLORS%(n% + 2) * 4)
    PUT #1, , Colr$
    Colr$ = CHR$(FileCOLORS%(n% + 1) * 4)
    PUT #1, , Colr$
    Colr$ = CHR$(FileCOLORS%(n%) * 4)
    PUT #1, , Colr$
    PUT #1, , u$ 'Unused byte
  NEXT n%

  FOR y = y2% TO y1% STEP -1   'place bottom up
    FOR x = x1% TO x2%
      a$ = CHR$(POINT(x, y))
      Colors8%(ASC(a$)) = 1
      PUT #1, , a$
    NEXT x
    PUT #1, , ZeroPAD$
  NEXT y

  FOR n = 0 TO 255
    IF Colors8%(n) = 1 THEN SigCOLORS& = SigCOLORS& + 1
  NEXT n

  PUT #1, 51, SigCOLORS&

  CLOSE #1

  END SUB

'********************* Four Bit
  SUB FourBIT (x1%, y1%, x2%, y2%, Filename$)    'SCREEN 12 bitmap maker
                                       'fullscreen takes about 8 seconds
  DIM FileCOLORS%(1 TO 48)
  DIM Colors4%(0 TO 15)

  IF INSTR(Filename$, ".BMP") = 0 THEN
    Filename$ = RTRIM$(LEFT$(Filename$, 8)) + ".BMP"
  END IF
  
  FileTYPE$ = "BM"
  Reserved1% = 0
  Reserved2% = 0
  OffsetBITS& = 118
  InfoHEADER& = 40
  PictureWIDTH& = x2% - x1% + 1
  PictureDEPTH& = y2% - y1% + 1
  NumPLANES% = 1
  BPP% = 4
  Compression& = 0
  WidthPELS& = 3780
  DepthPELS& = 3780
  NumCOLORS& = 16

  IF PictureWIDTH& MOD 8 <> 0 THEN
    ZeroPAD$ = SPACE$((8 - PictureWIDTH& MOD 8) \ 2)
  END IF

  ImageSIZE& = (((PictureWIDTH& + LEN(ZeroPAD$)) * PictureDEPTH&) + .1) / 2
  FileSize& = ImageSIZE& + OffsetBITS&
  
  OUT &H3C7, 0                    'start at color 0
  FOR n = 1 TO 48 STEP 3
    FileCOLORS%(n) = INP(&H3C9)
    FileCOLORS%(n + 1) = INP(&H3C9)
    FileCOLORS%(n + 2) = INP(&H3C9)
  NEXT n

  OPEN Filename$ FOR BINARY AS #1
                                   'Header bytes
  PUT #1, , FileTYPE$                   '2 '1 to 2
  PUT #1, , FileSize&                   '4
  PUT #1, , Reserved1% 'should be zero  '2
  PUT #1, , Reserved2% 'should be zero  '2
  PUT #1, , OffsetBITS&                 '4
  PUT #1, , InfoHEADER&                 '4
  PUT #1, , PictureWIDTH&               '4
  PUT #1, , PictureDEPTH&               '4
  PUT #1, , NumPLANES%                  '2
  PUT #1, , BPP%                        '2
  PUT #1, , Compression&                '4
  PUT #1, , ImageSIZE&                  '4
  PUT #1, , WidthPELS&                  '4
  PUT #1, , DepthPELS&                  '4
  PUT #1, , NumCOLORS&                  '4
  PUT #1, , SigCOLORS&                  '4 '51 - 54

  u$ = " "             'unused byte
  FOR n% = 1 TO 46 STEP 3   'PUT as BGR order colors
    Colr$ = CHR$(FileCOLORS%(n% + 2) * 4)
    PUT #1, , Colr$
    Colr$ = CHR$(FileCOLORS%(n% + 1) * 4)
    PUT #1, , Colr$
    Colr$ = CHR$(FileCOLORS%(n%) * 4)
    PUT #1, , Colr$
    PUT #1, , u$ 'add Unused byte
  NEXT n%

  FOR y = y2% TO y1% STEP -1    'Place from bottom up
    FOR x = x1% TO x2% STEP 2   'nibble steps
      HiX = POINT(x, y): Colors4%(HiX) = 1     'added here
      LoX = POINT(x + 1, y): Colors4%(LoX) = 1
      HiNIBBLE$ = HEX$(HiX)
      LoNIBBLE$ = HEX$(LoX)
      HexVAL$ = "&H" + HiNIBBLE$ + LoNIBBLE$
      a$ = CHR$(VAL(HexVAL$))
      PUT #1, , a$
    NEXT x
    PUT #1, , ZeroPAD$
  NEXT y

  FOR n = 0 TO 15
    IF Colors4%(n) = 1 THEN SigCOLORS& = SigCOLORS& + 1
  NEXT n
  PUT #1, 51, SigCOLORS&        'new PUT

  CLOSE #1
  'BEEP         'optional sound if available for 4 bit only
  END SUB
Ted
Please acknowledge and thank members who answer your questions!
QB64 is a FREE QBasic compiler for WIN, MAC(OSX) and LINUX : https://www.qb64.org/forum/index.php
Get my Q-Basics demonstrator: https://www.dropbox.com/s/fdmgp91d6h8ps ... s.zip?dl=0
iamdenteddisk
Veteran
Posts: 185
Joined: Mon Jun 30, 2008 4:10 pm

ty

Post by iamdenteddisk »

thanks again burger!
Yazar
Coder
Posts: 11
Joined: Sat May 24, 2008 10:51 pm

Post by Yazar »

if you check the INTERRUPTS you can see the 'PRINT SCREEN' interrupt. You can easily write a code and replace it with the original print screen interrupt and by the way you can get all dos? ss with Print screen key. Your new interrupt code should know the screen dimensions (ver, hor, depth) and you've to insert a bmp saving routinne. Also, there is an CLIPBOARD interrupt. You can use it for copiing and pasting image. While finishing your new interrupt code, don't forget to replace the original vector values...
User avatar
burger2227
Veteran
Posts: 2466
Joined: Mon Aug 21, 2006 12:40 am
Location: Pittsburgh, PA

HOW DO YOU LOOK AND SEE AN INTERRUPT Mr. Wizard?

Post by burger2227 »

NO ZAR! Print Screen will not work with fullscreen QB graphics screeens!

Q: Why don't you tell us the Interrupt? A: You don't know?

You CAN BSAVE the Screen 13 buffer to a binary file. The color RGB values would need to be combined in the upper part of the Image Array also.

Here is a link to the above "Snapshot.Zip" routine that creates bitmaps of screen 12 or 13.

http://www.qbasicstation.com/index.php? ... &filecat=4

Ted
Post Reply