BBC BASIC for Windows
« TOOLS:Mask creator, pixel, set,sbox and more »

Welcome Guest. Please Login or Register.
Apr 5th, 2018, 10:41pm



ATTENTION MEMBERS: Conforums will be closing it doors and discontinuing its service on April 15, 2018.
Ad-Free has been deactivated. Outstanding Ad-Free credits will be reimbursed to respective payment methods.

If you require a dump of the post on your message board, please come to the support board and request it.


Thank you Conforums members.

BBC BASIC for Windows Resources
Online BBC BASIC for Windows documentation
BBC BASIC for Windows Beginners' Tutorial
BBC BASIC Home Page
BBC BASIC on Rosetta Code
BBC BASIC discussion group
BBC BASIC for Windows Programmers' Reference

« Previous Topic | Next Topic »
Pages: 1  Notify Send Topic Print
 thread  Author  Topic: TOOLS:Mask creator, pixel, set,sbox and more  (Read 483 times)
michael
Senior Member
ImageImageImageImage


member is offline

Avatar




PM


Posts: 335
laugh TOOLS:Mask creator, pixel, set,sbox and more
« Thread started on: Aug 13th, 2016, 07:22am »

*** if you get an "ACCESS DENIED" error from the OSCLI statement, make sure you save the program in a directory that isn't restricted.

So the mask tool should make a mask for the defined area and capture the image in a BMP file..
It works with RGB colors

sbox has been modified so you can control the background color.

I was trying to figure why *SCREENSAVE isn't capturing the variable defined area or accepting the name.

Perhaps I will need to use OSCLI

OSCLI "SCREENSAVE """+name$+""" "+STR$(x%)+","+STR$(y%)+","+STR$(dx%)+","+STR$(dy%*2)

Looks like that works

I am hoping the new mask tool is accurate. Try it out and let me know if the settings are good..

Try the other tools also.. They are newer improved tools from previous versions.
( I must note that if you use PROCcolor , you must use TINT to read a pixel color as PROCcolor produces a palette color even though the standard colors (0-15) are duplicated)
So POINT wont be able to be used if you use PROCcolor.
* The image capture is correct. its actually the size of sbox that is wrong. (left side is one pixel off... I will modify it so its accurate later today.
Code:
      REM I have modified the commands so they work with numbers or words or RGB values for colours ***************
      REM       width;height;charwidth,charheight,number of colors,character set
      VDU 23,22,1024;600;8,15,16,1 :REM max width is 1920 and 1440 height
      REM its a green pixel and its near the center of the window (function test)
      PROCpixel(500,500,"green")
      REM lets draw a bordered box to make a mask for
      PROCsbox(9,10,90,90,"white"):REM left side is offset to make it center. sbox needs adjustment
      PROCmask(0,0,100,100,"mybox")
      WAIT 1
      REM Turn off the text cursor _
      OFF
      VDU 5 : REM Treat text as graphics (transparent background)
      REM SET  returns...  (its a big pixel)
      PROCset(200,200,"5")
      PROCpr(110,100,"TEST: THE MASK IS CREATED","green")
      WAIT 0
      END
      REM h and v must always be a higher value as they are the top right corner of the image.( I will make this smart like sbox)
      DEFPROCmask(x%,y%,h%,v%,name$)
      name$=name$+".bmp"
      LOCAL dx%,dy%,c%,counx%,couny%
      counx%=0:couny%=0
      dx%= h%-x%
      dy%= v%-y%
      IF dx%>dy% OR dx%=dy% THEN
        REPEAT
          c%=TINT(x%+counx%,y%+couny%)
          IF c%=0 THEN PROCpixel(x%+counx%,y%+couny%+dy%+1,"light white") ELSE PROCpixel(x%+counx%,y%+couny%+dy%+1,"0")
          couny%+=1:IF couny%=y%+dy% THEN couny%=0:counx%=counx%+1
        UNTIL counx%=dx%+1
      ENDIF
      IF dy%>dx% THEN
        REPEAT
          c%=TINT(x%+counx%,y%+couny%)
          IF c%=0 THEN PROCpixel(x%+counx%,y%+couny%+dy%+1,"255,255,255") ELSE PROCpixel(x%+counx%,y%+couny%+dy%+1,"0")
          counx%+=1:IF counx%=x%+dx% THEN counx%=0:couny%=couny%+1
        UNTIL couny%=dy%+1
      ENDIF
      OSCLI "SCREENSAVE """+name$+""" "+STR$(x%)+","+STR$(y%)+","+STR$(dx%)+","+STR$(dy%*2)

      ENDPROC
      DEFPROCpixel(x%,y%,c$)
      PROCcolor("f",c$)
      MOVE x%,y%:DRAW x%,y%
      ENDPROC

      REM this may slow things a bit, but I want to change it:(this tool requires the sprite library and proper preparation. will not work without it)
      DEFPROC_getbmp(num%,bmpname$)
      LOCAL a%
      bmpname$+=".bmp"
      IF FN_createspritefrombmp(num%,bmpname$) = 0 THEN
        ERROR 100, "Couldn't create "+bmpname$+" sprite"
      ENDIF
      ENDPROC
      REM c$ can be colors like blue or 1 or a R,G,B color
      DEF PROCset(x%,y%,c$)
      LOCAL h%
      PROCcolor("f",c$)
      FOR h%=0 TO 20
        LINE x%+h%,y%,x%+h%,y%+20
      NEXT
      MOVE 0,0
      ENDPROC
      DEF PROCsbox(x%,y%,w%,h%,c$)
      LOCAL ry%,sx%,sy%
      sx%=x%:sy%=y%
      IF x%>w% THEN x%=w%:w%=sx%
      IF y%>h% THEN y%=h%:h%=sy%
      ry%=y%
      PROCcolor("f",c$)
      REPEAT
        LINE x%,y%,w%,y%
        y%=y%+1
      UNTIL y%=h%
      y%=ry%
      PROCcolor("f","000,000,000")
      LINE x%+2,y%+2,w%-2,y%+2
      LINE w%-2,y%+2,w%-2,h%-4
      LINE w%-2,h%-4,x%+2,h%-4
      LINE x%+2,h%-4,x%+2,y%+2
      ENDPROC
      REM color "F"or"B", "color name number or R G B"
      REM this was created to manage special colors and to hold onto the original first 2 pallets (as I use them all the time)
      DEF PROCcolor(fb$,rgb$)
      IF rgb$="0" OR rgb$="black" THEN rgb$="000,000,000"
      IF rgb$="1" OR rgb$="red" THEN rgb$="200,000,000"
      IF rgb$="2" OR rgb$="green" THEN rgb$="000,200,000"
      IF rgb$="3" OR rgb$="yellow" THEN rgb$="200,200,000"
      IF rgb$="4" OR rgb$="blue" THEN rgb$="000,000,200"
      IF rgb$="5" OR rgb$="magenta" THEN rgb$="200,000,200"
      IF rgb$="6" OR rgb$="cyan" THEN rgb$="000,200,200"
      IF rgb$="7" OR rgb$="white" THEN rgb$="200,200,200"
      IF rgb$="8" OR rgb$="grey" THEN rgb$="056,056,056"
      IF rgb$="9" OR rgb$="light red" THEN rgb$="248,056,056"
      IF rgb$="10" OR rgb$="light green" THEN rgb$="056,248,056"
      IF rgb$="11" OR rgb$="light yellow" THEN rgb$="248,248,056"
      IF rgb$="12" OR rgb$="light blue" THEN rgb$="056,056,248"
      IF rgb$="13" OR rgb$="light magenta" THEN rgb$="248,056,248"
      IF rgb$="14" OR rgb$="light cyan" THEN rgb$="056,248,248"
      IF rgb$="15" OR rgb$="light white" THEN rgb$="248,248,248"
      PRIVATE assemble$,br%,bg%,bb%
      assemble$=rgb$
      br%=VAL(MID$(assemble$,1,3)):bg%=VAL(MID$(assemble$,5,3)):bb%=VAL(MID$(assemble$,9,3))
      IF fb$="f" OR fb$="F" THEN COLOUR 0,br%,bg%,bb% : GCOL 0
      IF fb$="b" OR fb$="B" THEN COLOUR 1,br%,bg%,bb% : GCOL 128+1
      ENDPROC
      REM X,Y,text color,message,r,g,b
      REM ************************************************************************
      DEF PROCpr(X,Y,msg$,c$)
      LOCAL initialx%,fi%,reduction%,tx,ty
      initialx%=LEN(msg$)
      PROCcolor("f",c$)
      GCOL 0
      LET tx= X+initialx%+25
      LET ty= Y:reduction%=0
      reduction%=initialx%/2
      reduction%=reduction%*6
      IF initialx%<20 THEN reduction%=reduction%/2
      initialx%=initialx%*22-reduction%
      FOR fi%=12 TO 48
        LINE X-3,Y+20-fi%,X+initialx%+8,Y+20-fi%
      NEXT
      COLOUR 0,0,0,0
      GCOL 0
      MOVE tx,ty
      PRINT msg$
      MOVE 0,0 REM hide that thing
      ENDPROC
 
« Last Edit: Aug 13th, 2016, 4:40pm by michael » User IP Logged

I like making program generators and like reinventing the wheel
Pages: 1  Notify Send Topic Print
« Previous Topic | Next Topic »

| |

This forum powered for FREE by Conforums ©
Terms of Service | Privacy Policy | Conforums Support | Parental Controls