November 28, 2020, 10:51:08 AM

Author Topic: [bb] Curved Text routine and RLE vector functions (part 1) by Andy_A [ 1+ years ago ]  (Read 1209 times)

Offline BlitzBot

  • Jr. Member
  • **
  • Posts: 1
Title : Curved Text routine and RLE vector functions (part 1)
Author : Andy_A
Posted : 1+ years ago

Description : These RLE vector functions allow you to wrap text or images around a circle.

The functions are:
getImg() - scans an area on screen and stores in RLE image format in the vec() array. You must store your image in RLE format before using any of the other functions.

rotateImg() - rotates an image at 0, 90, 180, and 270 degrees and displays rotated image on screen

maskImg() - makes any single color of an RLE image transparent

replaceColor() - replace any single color of an RLE image with a different color

maskAndReplace() - mask a single color and replace a different single color with a new color

magnify() - enlarges and rotates an RLE image


curveImg() - wraps an RLE image around an arc segment. Similar to MS Word Art or Photoshop text curving.

Parameters for the curveImg function:
centerX%, centerY% - the center of the imaginary circle that you're wrapping around

radius% - radius of the imaginary circle. Start at a radius of 50 pixels (100 pixel diameter) and adjust to suit.

startAngle# - defines the start point of your RLE on the imaginary circle

arcSegment# - number of degrees to plot after the startAngle. If you start at 180 degrees and wrap an arc segment of 180 degrees, your image will start wrapping at 180 degrees, and plot to 360 degrees on the imaginary circle.

imgWidth% - width in pixels of your RLE image

imgHeight% = height in pixels of your RLE image

penSize% = use this to fill in the voids that are left when the math is more precise than the screen resolution. Start with a penSize of 1, increase penSize by 1 until there are no more voids.

(Made changes so 16 bit graphic cards can display properly)

(Another update: new vector storage format uses less memory,
now can be used to load images from data statements)


Code :
Code: BlitzBasic
  1. ;     Title: Blitz RLE Vector Image Demo
  2. ;Programmer: Andy Amaya
  3. ;      Date: 2004.03.25
  4. ;   Version: 1.08-Added dat2curv2buf() function
  5. ;    Update: 1.07-Added data2buffer() function
  6. ;    Update: 1.06-Added makeData() and getImgData() functions
  7. ;                 as a result, a new vector storage method is used.
  8. ;    Update: 1.05-Lock & UnLock buffer to use ReadPixelFast (does NOT work in B2D)
  9. ;    Update: 1.04-Added constants to support use with 16 bit color cards
  10. ;    Update: 1.03-Added curveImg Routine
  11. ;    Update: 1.01-Added maskImg, replaceColor, maskAndReplace routines
  12. ;    Update: 1.00-Original RLE image routine
  13.  
  14. AppTitle "Blitz Run Length Encoded Vector Images"
  15.  
  16. Global sw% = 800
  17. Global sh% = 600
  18. Global cd% = 32 ;<--------------- Color depth
  19.  
  20. Graphics sw, sh , cd, 2
  21. SetBuffer BackBuffer()
  22.  
  23. Dim vecs(1) ;vector array (true dimension size in image data)
  24. Dim pal%(1)     ;Color palette array (true dimension size in image data)
  25.  
  26. ;========== masking constants for 32 bit color =========
  27.         Global maskRed% = 16711680
  28.         Global maskGrn% = 65280
  29.         Global maskBlu% = 255
  30. ;=======================================================
  31.  
  32. ;========= masking constants for 16 bit (5-6-5) ========
  33. ;       Global maskRed% = 16252928
  34. ;       Global maskGrn% = 64512 ;change to 63488 for (5-5-5)
  35. ;       Global maskBlu% = 248
  36. ;=======================================================
  37.  
  38.  
  39. Arial40bi% = LoadFont("Arial",40,True,True)
  40. Arial18b%  = LoadFont("Arial",18,True)
  41.  
  42. Cls
  43. Color 0,128,255
  44. Rect 0, 0,sw-1, sh-1,True
  45.  
  46. SetFont Arial40bi
  47. msg$ = "Rotate text"
  48. msgWide% = StringWidth(msg$)
  49. msgHigh% = StringHeight(msg$)
  50. Color 255,0,0
  51. center% = (sw-msgWide) Shr 1
  52. Rect center, 0,msgWide,msgHigh,True
  53. Color 255,255,255
  54. Text center,0,msg$
  55. SetFont arial18b
  56. Text 350,46,"(Original Image)"
  57.  
  58. getImg(center, 0, msgWide, msgHigh)
  59. rotateImg(  010,             100,                                            msgWide, msgHigh)
  60. rotateImg( 9010+msgWide,     100+msgHigh,                    msgWide, msgHigh)
  61. rotateImg(18010+msgWide,     100+msgWide+msgHigh*2,  msgWide, msgHigh)
  62. rotateImg(27010,                     100+msgWide+msgHigh,    msgWide, msgHigh)
  63.  
  64. maskImg(  0, 210,                       100,                                    msgWide, msgHigh, 255, 0, 0)
  65. maskImg( 90, 210+msgWide,       100+msgHigh,                    msgWide, msgHigh, 255, 0, 0)
  66. maskImg(180, 210+msgWide,       100+msgWide+msgHigh*2,  msgWide, msgHigh, 255, 0, 0)
  67. maskImg(270, 210,                       100+msgWide+msgHigh,    msgWide, msgHigh, 255, 0, 0)
  68.  
  69. replaceColor(  0, 410,                  100,                                    msgWide, msgHigh, 255, 255, 255, 255, 255, 0)
  70. replaceColor( 90, 410+msgWide,  100+msgHigh,                    msgWide, msgHigh, 255, 255, 255, 255, 255, 0)
  71. replaceColor(180, 410+msgWide,  100+msgWide+msgHigh*2,  msgWide, msgHigh, 255, 255, 255, 255, 255, 0)
  72. replaceColor(270, 410,                  100+msgWide+msgHigh,    msgWide, msgHigh, 255, 255, 255, 255, 255, 0)
  73.  
  74. maskAndReplace(  0, 610,                100,                                    msgWide, msgHigh, 255, 0, 0, 255, 255, 255, 255, 255, 32)
  75. maskAndReplace( 90, 610+msgWide,100+msgHigh,                    msgWide, msgHigh, 255, 0, 0, 255, 255, 255, 255, 192, 32)
  76. maskAndReplace(180, 610+msgWide,100+msgWide+msgHigh*2,  msgWide, msgHigh, 255, 0, 0, 255, 255, 255, 200, 224, 64)
  77. maskAndReplace(270, 610,                100+msgWide+msgHigh,    msgWide, msgHigh, 255, 0, 0, 255, 255, 255, 192, 255, 32)
  78.  
  79. Color 255,255,255
  80. SetFont Arial18b
  81. Text 20,365,"Example of rotated text"
  82.  
  83. Text 220,365,"Example of masking"
  84. Text 220,388,"the red from image"
  85.  
  86. Text 420,365,"Example of replacing"
  87. Text 420,388,"white with yellow"
  88.  
  89. Text 620,365,"Example of masking"
  90. Text 620,388,"red and replacing"
  91. Text 620,411,"the white"
  92. Text 10,570,"click to continue"
  93.  
  94. Flip
  95.  
  96. WaitMouse()
  97. FlushMouse()
  98.  
  99. SetFont Arial40bi
  100. Color 0,128,255
  101. Rect 0, 0, sw-1, sh-1, True
  102. msg$ = "Zoom 1x-32x"
  103. msgWide% = StringWidth(msg$)
  104. msgHigh% = StringHeight(msg$)
  105.  
  106. Color 255,0,0
  107. center% = (sw-msgWide) Shr 1
  108. Rect 0, 0,msgWide,msgHigh,True
  109. Color 255,255,255
  110. Text 0,0,msg$
  111. SetFont arial18b
  112. Text 40,46,"(Original Image)"
  113.  
  114. getImg(0, 0, msgWide, msgHigh)
  115.  
  116. magnify(  0, center,                    0,                                              msgWide, msgHigh, 2)
  117. magnify( 90, center+msgWide*2-2,msgHigh*2,                              msgWide, msgHigh, 2)
  118. magnify(180, center+msgWide*2,  msgWide*2+msgHigh*4-2,  msgWide, msgHigh, 2)
  119. magnify(270, center,                    msgWide*2+msgHigh*2,    msgWide, msgHigh, 2)
  120.  
  121. SetFont Arial18b
  122. Color 255,255,255
  123. Text center+175,289,"(this is 2x)"
  124. Text 10,570,"click to continue"
  125. Flip
  126.  
  127. WaitMouse()
  128. FlushMouse()
  129.  
  130. Color 0, 128, 255
  131. Rect 0, 0, sw-1, sh-1, True
  132.  
  133. SetFont Arial40bi
  134. msg$ = "Curved Text Example "
  135. msgWide% = StringWidth(msg$)-5
  136. msgHigh% = StringHeight(msg$)
  137.  
  138. center% = (sw-msgWide) Shr 1
  139. Color 255,0,0
  140. Rect center, 0,msgWide,msgHigh,True
  141. Color 255,255,255
  142. Text center,0,msg$
  143. SetFont Arial18b
  144. Text 100,0,"(Original Image)"
  145. Text 10,570,"click to exit"
  146. getImg(center, 0, msgWide, msgHigh)
  147.  
  148. curveImg(400, 320, 275, 180.0, 360.0, msgWide, msgHigh, 5)
  149. curveImg(400, 320, 225, 270.0, 270.0, msgWide, msgHigh, 4)
  150. curveImg(400, 320, 175,   0.0, 225.0, msgWide, msgHigh, 4)
  151. curveImg(400, 320, 125,  90.0, 270.0, msgWide, msgHigh, 3)
  152. curveImg(400, 320,  75, 112.0, 315.0, msgWide, msgHigh, 2)
  153.  
  154.  
  155. Flip
  156. WaitMouse()
  157.  
  158. FreeFont Arial40bi
  159. FreeFont Arial18b
  160. End
  161.  
  162. Function getImg(x%, y%, imgWidth%, imgHeight%)
  163.         ;Allocate enough memory for worst case scenario
  164.         Dim vecs(imgWidth*imgHeight*2)
  165.         ;================
  166.                 LockBuffer
  167.         ;================
  168.         vCount% = -2
  169.         cCount% = -1
  170.         lastColor% = -1
  171.         For j% = y To y + imgHeight-1
  172.                 pixCount = 0
  173.                 For i% = x To x+imgWidth-1
  174.                         ;Get pixel color from current screen coords
  175.                         pixColor% = ReadPixelFast(i, j)
  176.                         ;============== 16 bit (5-6-5)================================
  177.                         ;  modify pixel color  values for 16bit color
  178.                         ;=============================================================
  179.                         If cd = 16 Then
  180.                                 pixColor = pixColor And 16317688 ;use 16253176 for (5-5-5)
  181.                     End If
  182.                         ;=============================================================
  183.                         ;Keep track of how many pixels of current color
  184.                         pixCount% = pixCount% + 1
  185.                         ;If at start of a raster line OR there's a change in color
  186.                         ;Then keep track of how many pixels for current color
  187.                         If (i = x) Or (pixColor <> lastColor) Then
  188.                                 ;remember pixel color as the last color encountered in bitmap
  189.                                 lastColor = pixColor
  190.                                 vecLen% = 1
  191.                                 vCount = vCount + 2 ;even numbered elements hold length values
  192.                                 cCount = cCount + 2 ;odd numbered elements hold color values
  193.                                 ;Update vector array: evenNumber element = number of same color pixels
  194.                                 vecs(vCount) = vecLen
  195.                                 ;Update vector array:  oddNumber element = new pixel color to store
  196.                                 vecs(cCount) = pixColor
  197.                         Else
  198.                                 ;Otherwise just add to the number of same colored pixels
  199.                                 vecLen = vecLen + 1
  200.                                 vecs(vCount) = vecLen
  201.                         End If
  202.                 Next
  203.         Next
  204.         ;==================
  205.                 UnlockBuffer
  206.         ;==================
  207. End Function
  208.  
  209. Function rotateImg(angle%, x%, y%, imgWidth%, imgHeight%)
  210.         If angle = 0 Or angle = 90 Or angle = 180 Or angle = 270 Then
  211.                 angle2% = angle + 90
  212.                 vCount% = 0
  213.                 For i% = 1 To imgHeight
  214.                         p# = Cos(angle2)*(i-1)+x
  215.                         q# = Sin(angle2)*(i-1)+y
  216.                         lineLen% = 0
  217.                         While lineLen < imgWidth
  218.                                 vecLen = vecs(vCount)
  219.                                 lineLen = linelen + vecLen
  220.                                 red% = (vecs(vCount + 1) And maskRed) Shr 16
  221.                                 grn% = (vecs(vCount + 1) And maskGrn) Shr 8
  222.                                 blu% =  vecs(vCount + 1) And maskBlu
  223.                                 ;===========================================================
  224.                                 If cd = 16 Then
  225.                                         red = red Shr 3 Shl 3
  226.                                         grn = grn Shr 2 Shl 2 ;change to Shr 3 Shl 3 for (5-5-5)
  227.                                         blu = blu Shr 3 Shl 3
  228.                             End If
  229.                                 ;===========================================================
  230.  
  231.                                 Color red,grn,blu
  232.                                 r# = Cos(angle)*vecLen+p
  233.                                 s# = Sin(angle)*vecLen+q
  234.                                 Line p,q,r,s
  235.                                 vCount = vCount+2
  236.                                 p=r
  237.                                 q=s
  238.                         Wend
  239.                 Next
  240.         End If
  241. End Function
  242.  
  243. Function maskImg(angle%, x%, y%, imgWidth%, imgHeight%, r1%, g1%, b1%)
  244.         If angle = 0 Or angle = 90 Or angle = 180 Or angle = 270 Then
  245.         ;===16 bit (5-6-5)============================
  246.         ;  modify parameter values for 16bit color
  247.         ;=============================================
  248.         If cd = 16 Then
  249.                 r1 = r1 Shr 3 Shl 3
  250.                 g1 = g1 Shr 2 Shl 2 ;change to Shr 3 Shl 3 for (5-5-5)
  251.                 b1 = b1 Shr 3 Shl 3
  252.         End If
  253.         ;=============================================
  254.                 angle2% = angle + 90
  255.                 vCount% = 0
  256.                 For i% = 1 To imgHeight
  257.                         p# = Cos(angle2)*(i-1)+x
  258.                         q# = Sin(angle2)*(i-1)+y
  259.                         lineLen% = 0
  260.                         While lineLen < imgWidth
  261.                                 vecLen = vecs(vCount)
  262.                                 lineLen = linelen + vecLen
  263.                                 red% = (vecs(vCount + 1) And maskRed) Shr 16
  264.                                 grn% = (vecs(vCount + 1) And maskGrn) Shr 8
  265.                                 blu% =  vecs(vCount + 1) And maskBlu
  266.                                 ;============== 16 bit (5-6-5)==============================
  267.                                 ;  modify parameter values for 16bit color
  268.                                 ;===========================================================
  269.                                 If cd = 16 Then
  270.                                         red = red Shr 3 Shl 3
  271.                                         grn = grn Shr 2 Shl 2 ;change to Shr 3 Shl 3 for (5-5-5)
  272.                                         blu = blu Shr 3 Shl 3
  273.                             End If
  274.                                 ;===========================================================
  275.                                 Color red,grn,blu
  276.                                 r# = Cos(angle)*vecLen+p
  277.                                 s# = Sin(angle)*vecLen+q
  278.                                 If r1=red And g1=grn And b1=blu Then
  279.                                         vCount = vCount+2
  280.                                 Else
  281.                                         Line p,q,r,s
  282.                                         vCount = vCount+2
  283.                             End If
  284.                                 p=r
  285.                                 q=s
  286.                         Wend
  287.                 Next
  288.         End If
  289. End Function
  290.  
  291. Function replaceColor(angle%, x%, y%, imgWidth%, imgHeight%, r1%, g1%, b1%, r2%, g2%, b2%)
  292.         If angle = 0 Or angle = 90 Or angle = 180 Or angle = 270 Then
  293.         ;===16 bit (5-6-5)========================================
  294.         ;  modify parameter values for 16bit color
  295.         ;=========================================================
  296.         If cd = 16 Then
  297.                 r1 = r1 Shr 3 Shl 3
  298.                 g1 = g1 Shr 2 Shl 2 ;change to Shr 3 Shl 3 for (5-5-5)
  299.                 b1 = b1 Shr 3 Shl 3
  300.                 r2 = r2 Shr 3 Shl 3
  301.                 g2 = g2 Shr 2 Shl 2 ;change to Shr 3 Shl 3 for (5-5-5)
  302.                 b2 = b2 Shr 3 Shl 3
  303.         End If
  304.         ;=========================================================
  305.                 angle2% = angle + 90
  306.                 vCount% = 0
  307.                 For i% = 1 To imgHeight
  308.                         p# = Cos(angle2)*(i-1)+x
  309.                         q# = Sin(angle2)*(i-1)+y
  310.                         lineLen% = 0
  311.                         While lineLen < imgWidth
  312.                                 vecLen = vecs(vCount)
  313.                                 lineLen = linelen + vecLen
  314.                                 red = (vecs(vCount + 1) And maskRed) Shr 16
  315.                                 grn = (vecs(vCount + 1) And maskGrn) Shr 8
  316.                                 blu =  vecs(vCount + 1) And maskBlu
  317.                                 ;============== 16 bit (5-6-5)==============================
  318.                                 ;  modify parameter values for 16bit color
  319.                                 ;===========================================================
  320.                                 If cd = 16 Then
  321.                                         red = red Shr 3 Shl 3
  322.                                         grn = grn Shr 2 Shl 2 ;change to Shr 3 Shl 3 for (5-5-5)
  323.                                         blu = blu Shr 3 Shl 3
  324.                             End If
  325.                                 ;===========================================================
  326.                                 Color red,grn,blu
  327.                                 r# = Cos(angle)*vecLen+p
  328.                                 s# = Sin(angle)*vecLen+q
  329.                                 If r1=red And g1=grn And b1=blu Then
  330.                                         Color r2,g2,b2
  331.                             End If
  332.                                 Line p,q,r,s
  333.                                 vCount = vCount+2
  334.                                 p=r
  335.                                 q=s
  336.                         Wend
  337.                 Next
  338.         End If
  339. End Function
  340.  
  341. Function maskAndReplace(angle%, x%, y%, imgWidth%, imgHeight%, r1%, g1%, b1%, r2%, g2%, b2%, r3%, g3%, b3%)
  342.          If angle = 0 Or angle = 90 Or angle = 180 Or angle = 270 Then
  343.         ;===16 bit (5-6-5)========================================
  344.         ;  modify parameter values for 16bit color
  345.         ;=========================================================
  346.         If cd = 16 Then
  347.                 r1 = r1 Shr 3 Shl 3
  348.                 g1 = g1 Shr 2 Shl 2 ;change to Shr 3 Shl 3 for (5-5-5)
  349.                 b1 = b1 Shr 3 Shl 3
  350.                 r2 = r2 Shr 3 Shl 3
  351.                 g2 = g2 Shr 2 Shl 2 ;change to Shr 3 Shl 3 for (5-5-5)
  352.                 b2 = b2 Shr 3 Shl 3
  353.                 r3 = r3 Shr 3 Shl 3
  354.                 g3 = g3 Shr 2 Shl 2 ;change to Shr 3 Shl 3 for (5-5-5)
  355.                 b3 = b3 Shr 3 Shl 3
  356.         End If
  357.         ;=========================================================
  358.                 angle2% = angle + 90
  359.                 vCount% = 0
  360.                 For i% = 1 To imgHeight
  361.                         p# = Cos(angle2)*(i-1)+x
  362.                         q# = Sin(angle2)*(i-1)+y
  363.                         lineLen% = 0
  364.                         While lineLen < imgWidth
  365.                                 vecLen = vecs(vCount)
  366.                                 lineLen = linelen + vecLen
  367.                                 red = (vecs(vCount + 1) And maskRed) Shr 16
  368.                                 grn = (vecs(vCount + 1) And maskGrn) Shr 8
  369.                                 blu =  vecs(vCount + 1) And maskBlu
  370.                                 ;============== 16 bit (5-6-5)==============================
  371.                                 ;  modify parameter values for 16bit color
  372.                                 ;===========================================================
  373.                                 If cd = 16 Then
  374.                                         red = red Shr 3 Shl 3
  375.                                         grn = grn Shr 2 Shl 2 ;change to Shr 3 Shl 3 for (5-5-5)
  376.                                         blu = blu Shr 3 Shl 3
  377.                             End If
  378.                                 ;===========================================================
  379.                                 Color red,grn,blu
  380.                                 r# = Cos(angle)*vecLen+p
  381.                                 s# = Sin(angle)*vecLen+q                               
  382.                                 If r2=red And g2=grn And b2=blu Then
  383.                                         Color r3,g3,b3
  384.                                         Line p,q,r,s
  385.                                         vCount = vCount+2
  386.                                 Else
  387.                                         If r1=red And g1=grn And b1=blu Then
  388.                                                 vCount = vCount+2
  389.                                         Else
  390.                                                 Line p,q,r,s
  391.                                                 vCount = vCount+2
  392.                                     End If
  393.                                 End If
  394.                                 p=r
  395.                                 q=s
  396.                         Wend
  397.                 Next
  398.         End If
  399. End Function
  400.  
  401. Function magnify(angle%, x%, y%, imgWidth%, imgHeight%, magLevel%)
  402.     If angle = 0 Or angle = 90 Or angle = 180 Or angle = 270 Then
  403.                 If magLevel > 0 And magLevel < 33 Then
  404.                         angle2% = angle + 90
  405.                         vCount% = 0
  406.                         i% = 1
  407.                         While i < imgHeight*magLevel
  408.                                 p# = Cos(angle2)*(i-1)+x
  409.                                 q# = Sin(angle2)*(i-1)+y
  410.                                 lineLen% = 0
  411.                                 While lineLen < imgWidth
  412.                                         vecLen = vecs(vCount)
  413.                                         lineLen = linelen + vecLen
  414.                                         red = (vecs(vCount + 1) And maskRed) Shr 16
  415.                                         grn = (vecs(vCount + 1) And maskGrn) Shr 8
  416.                                         blu =  vecs(vCount + 1) And maskBlu
  417.                                         ;============== 16 bit (5-6-5)==============================
  418.                                         ;  modify parameter values for 16bit color
  419.                                         ;===========================================================
  420.                                         If cd = 16 Then
  421.                                                 red = red Shr 3 Shl 3
  422.                                                 grn = grn Shr 2 Shl 2 ;change to Shr 3 Shl 3 for (5-5-5)
  423.                                                 blu = blu Shr 3 Shl 3
  424.                                     End If
  425.                                         ;===========================================================
  426.                                         Color red,grn,blu
  427.                                         Select angle
  428.                                                 Case  0
  429.                                                         boxWide% = magLevel * vecLen
  430.                                                         boxHigh% = magLevel
  431.                                                         Rect p, q, boxWide, boxHigh, True
  432.                                                         p = p + boxWide
  433.                                                 Case  90
  434.                                                         boxWide% = magLevel
  435.                                                         boxHigh% = magLevel * vecLen
  436.                                                         Rect p, q, boxWide, boxHigh, True
  437.                                                         q = q + boxHigh
  438.                                                 Case  180
  439.                                                         p = p - magLevel * vecLen
  440.                                                         boxWide = magLevel * vecLen
  441.                                                         boxHigh = magLevel
  442.                                                         Rect p, q, boxWide, boxHigh, True
  443.                                                 Case  270
  444.                                                         q = q - magLevel*vecLen
  445.                                                         boxWide = magLevel
  446.                                                         boxHigh = magLevel * vecLen
  447.                                                         Rect p, q, boxWide, boxHigh, True
  448.                                         End Select
  449.                                         vCount = vCount + 2
  450.                                 Wend
  451.                                 i = i + magLevel
  452.                         Wend
  453.                 End If
  454.         End If
  455. End Function
  456.  
  457. Function curveImg(centerX%, centerY%, radius%, startAngle#, arcSegment#, imgWidth%, imgHeight%, penSize%)
  458.         If penSize > 1 Then penOffset# = penSize/2
  459.         stepSize# = arcSegment/imgWidth
  460.         vCount% = 0
  461.         For i% = 1 To imgHeight
  462.                 lineLen% = 0
  463.                 arc# = startAngle
  464.                 While lineLen < imgWidth
  465.                         arcLen = vecs(vCount)
  466.                         lineLen = lineLen + arcLen
  467.                         red = (vecs(vCount + 1) And maskRed) Shr 16
  468.                         grn = (vecs(vCount + 1) And maskGrn) Shr 8
  469.                         blu =  vecs(vCount + 1) And maskBlu
  470.                         ;============== 16 bit (5-6-5)==============================
  471.                         ;  modify parameter values for 16bit color
  472.                         ;===========================================================
  473.                         If cd = 16 Then
  474.                                 red = red Shr 3 Shl 3
  475.                                 grn = grn Shr 2 Shl 2 ;change to Shr 3 Shl 3 for (5-5-5)
  476.                                 blu = blu Shr 3 Shl 3
  477.                     End If
  478.                         ;===========================================================
  479.                         Color red, grn, blu
  480.                         arcInc# = arcLen*stepSize
  481.                         c# = arc#
  482.                         While c <= arc+arcInc
  483.                                 x = Cos(c)*radius+centerX
  484.                                 y = Sin(c)*radius+centerY
  485.                                 If penSize > 1 Then
  486.                                         Rect x-penOffset, y-penOffset, penSize, penSize, True
  487.                                 Else
  488.                                         Plot x,y
  489.                                 End If
  490.                                 c = c+stepSize
  491.                         Wend
  492.                         arc = arc+arcInc
  493.                         vCount = vCount+2
  494.                 Wend
  495.                 radius = radius - 1
  496.         Next
  497. End Function


Comments :


big10p(Posted 1+ years ago)

 Neat demo but on the first screen there's no difference in the rotated text examples - they're all white text on red background.


Andy_A(Posted 1+ years ago)

 Thanks for the comment.I downloaded the code from here, and it ran fine on my machine. The white text on a red background was used for contrast. The first rectangle should be made up of "Rotate Text" rotated at 0, 90, 180, 270 degrees. The second rectangle should be "Rotate Text" without the red background. The third rectangle should be yellow text on red background. The last rectangle should be four different shades of yellow without the red background. If your screen is different, it's probably because I only coded for 32 bit colors, though 16 bit color should be an easy tweak.


Andy_A(Posted 1+ years ago)

 big10p,Made changes to code to allow for 16 bit color cards.Change: Graphics 800,600,32,2   to  Graphics 800,600,16,2Comment Out 32bit color masks and un-comment 16bit color masksThen un-comment 16 bit variable assignments in rest of code. They are all sectioned off with comments, so they're easy to spot.That should do it!


Andy_A(Posted 1+ years ago)

 OK, it's fixed, forgot to make the color depth variable global.Change cd from 32 to 16Comment 32bit color masks and un-comment 16bit mask valuesHave tested at 16bit (5-6-5) and it works.


big10p(Posted 1+ years ago)

 OK, it works now. ;)


Andy_A(Posted 1+ years ago)

 Glad to hear it worked for you, I did test it by resetting my graphics to 16bit and it worked, but it's good to hear it worked on a different system. Currently working on a file packing system, kind of like the one Terrabit made. Using the RLE compression with some more logic should make it feasible to include small images inside the source code of a project. I converted a 1.7Mb file using RLE to 85K. That works out to a 20:1 compression ratio. Another file I converted went from 30K to 20K, only 33 percent less. RLE doesn't work well with images that have lots of color gradients, but for simple graphics like sprites, it should be OK.


 

SimplePortal 2.3.6 © 2008-2014, SimplePortal