Posted: Thu May 10, 2012 4:12 pm Post subject: RE:New Draw Module
...Open Turing, with some slight modifications done by yours truly.
Sponsor Sponsor
copthesaint
Posted: Thu May 10, 2012 4:27 pm Post subject: RE:New Draw Module
@Dreadnought, You have to use version 4.0.5 and It will work. make sure the splash screen says 4.0.5 when you open turing. I am not using openturing.
Amarylis
Posted: Thu May 10, 2012 4:30 pm Post subject: RE:New Draw Module
I know you are not- Dreadnought asked which version I was using
copthesaint
Posted: Thu May 10, 2012 6:27 pm Post subject: Re: New Draw Module
Well I am posting an update, right now the image capture works awsome! With certain exceptions, that if not meant will cause bugs atm. Currently I have found these bugs:
#1 "Not divisible by 8 error": If the image is not divisable by 8, my program like to report error: Array subscript is out of range line 92 when getting the values.
#2 "Height greater then width run-time error": If the image has a height greater then the width then the image crops its self from the bottom up until the height - difference = width.
I am please though at how well it works, and how fast it works.
Turing:
type Pixel : record
CLR :array1.. 3ofint2
Alpha :real4 endrecord
type Buffer : record
RGB : Pixel
Depth :int1 endrecord
const TransperentColor :int1:=0 const maxColor :int:=255shl0| 255shl8| 255shl16| 255shl24 const LayerFileExtension :string:="lbm" var widthLayer, heightLayer :int2:=0 var posXLayer, posYLayer :int2:=0 var scale :int2:=0 var depth :int1:=0 var layer :flexiblearray1.. 0of Buffer
var layerBoundSize :int:=0
function GetColors (x :int):array0.. 3ofint var resultingValue :array0.. 3ofint%The Color values. var y :nat:=0 if x < 0then
y :=(maxnat) & (x) else
y := x
endif
%A temp variable to hold the value sent from the bitmap for i :0.. 3%for all 4 values
resultingValue (3 - i):= y shr((3 - i)*8)%the color is equal to temp variable's value shift right (3-i)*8
y := y - (resultingValue (3 - i)shl((3 - i)*8))% the temp variable is subtracted by the color value shift left (3-i)*8 endfor% end for if y =0then result resultingValue
endif end GetColors
procedure Resize (x, y :int)
widthLayer := x
heightLayer := y
layerBoundSize := widthLayer * heightLayer
var tempSize :int:=upper(layer) if layerBoundSize > upper(layer)then new layer, layerBoundSize
endif for i : tempSize + 1.. upper(layer)
layer (i).RGB.CLR (1):=0
layer (i).RGB.CLR (2):=0
layer (i).RGB.CLR (3):=0
layer (i).RGB.Alpha :=1
layer (i).Depth :=0 endfor end Resize
procedure SaveLayerFile (name :string) var saveName :string:= name + "." + LayerFileExtension
end SaveLayerFile
procedure LoadLayerFile (name :string) var saveName :string:= name + "." + LayerFileExtension
end LoadLayerFile
procedure Capture (xPos1, yPos1, xPos2, yPos2 :int) var valID :int:=21 var b :array1.. sizepic(xPos1, yPos1, xPos2, yPos2)ofint var tempArray :array0.. 3ofint for i :1.. upper(b)
b (i):=0 endfor takepic(xPos1, yPos1, xPos2, yPos2, b)
Resize (b (2), b (1))
posXLayer := xPos1
posYLayer := yPos1
var imageID :int:=1 var imageColorShade :int:=0 for i : valID .. (b (13)div4) + valID - 1
tempArray := GetColors (b (i)) for j :0.. 3
imageColorShade := imageColorShade + 1
layer (imageID).RGB.CLR (imageColorShade):= tempArray (j) if imageColorShade > 2then
imageColorShade :=0
imageID := imageID + 1 endif endfor endfor
end Capture
procedure Display
cls var b :array1.. sizepic(1, 1, widthLayer, heightLayer)ofint takepic(1, 1, widthLayer, heightLayer, b) var valID :int:=21 for i : valID .. upper(b)
b (i):=0 endfor
b (7):=56% why 56? it changes how the image is shifted when redrawn var imageID :int:=1 var imageColorShade :int:=0 for i : valID .. (b (13)div4) + valID - 1 for j :0.. 3
imageColorShade := imageColorShade + 1
b (i)| = layer (imageID).RGB.CLR (imageColorShade)shl(j *8) if imageColorShade > 2then
imageColorShade :=0
imageID := imageID + 1 endif endfor
procedure Clear
for i :1.. upper(layer)
layer (i).RGB.CLR (1):= TransperentColor
layer (i).RGB.CLR (2):= TransperentColor
layer (i).RGB.CLR (3):= TransperentColor
endfor end Clear
procedure Scale (x :int2)
scale := x
end Scale
procedure Depth (x :int2)
depth := x
end Depth
procedure Transparency (x :real4) for i :1.. upper(layer)
layer (i).RGB.Alpha := x
endfor end Transparency
procedure Invert
for i :1.. upper(layer)
layer (i).RGB.CLR (1):=255 - layer (i).RGB.CLR (1)
layer (i).RGB.CLR (2):=255 - layer (i).RGB.CLR (2)
layer (i).RGB.CLR (3):=255 - layer (i).RGB.CLR (3) endfor end Invert
procedure TransparencyNoColor (x :real4) for i :1.. upper(layer) if layer (i).RGB.CLR (1) + layer (i).RGB.CLR (2) + layer (i).RGB.CLR (3)=(TransperentColor *3)then
layer (i).RGB.Alpha := x
endif endfor end TransparencyNoColor
procedure ColorBack (R, G, B :int) for i :1.. upper(layer)
layer (i).RGB.CLR (3):= R
layer (i).RGB.CLR (2):= G
layer (i).RGB.CLR (1):= B
endfor end ColorBack
procedure ColorBackRed (R :int) for i :1.. upper(layer)
layer (i).RGB.CLR (3):= R
endfor end ColorBackRed
procedure ColorBackGreen (G :int) for i :1.. upper(layer)
layer (i).RGB.CLR (2):= G
endfor end ColorBackGreen
procedure ColorBackBlue (B :int) for i :1.. upper(layer)
layer (i).RGB.CLR (1):= B
endfor end ColorBackBlue
procedure BlackWhite
var tempVal :int for i :1.. upper(layer)
tempVal :=(layer (i).RGB.CLR (1) + layer (i).RGB.CLR (2) + layer (i).RGB.CLR (3))div3
layer (i).RGB.CLR (1):= tempVal
layer (i).RGB.CLR (2):= tempVal
layer (i).RGB.CLR (3):= tempVal
endfor end BlackWhite
procedure DrawDot (x, y, R, G, B :int) if x < widthLayer + 1and x > 0and y < heightLayer + 1and y > 0then
layer ((y - 1)* widthLayer + x).RGB.CLR (3):= R
layer ((y - 1)* widthLayer + x).RGB.CLR (2):= G
layer ((y - 1)* widthLayer + x).RGB.CLR (1):= B
endif end DrawDot
procedure DrawOval (x, y, radX, radY, R, G, B :int) var perimeter :real:=3.1415* radX * radY
var angleInc :real:=360 / perimeter
for i :1.. round(perimeter)
DrawDot (x + round(radX *cosd(angleInc * i)), y + round(radY *sind(angleInc * i)), R, G, B) endfor end DrawOval
procedure DrawArc (x, y, radX, radY :int, initA, finishA :real, R, G, B :int) var perimeter :real:=(finishA - initA) / 360*3.1415* radX * radY
var angleInc :real:=(finishA - initA) / perimeter
for i :1.. round(perimeter)
DrawDot (x + round(radX *cosd(initA + angleInc * i)), y + round(radY *sind(initA + angleInc * i)), R, G, B) endfor end DrawArc
Posted: Sun May 20, 2012 4:56 pm Post subject: Re: New Draw Module
I have run into another problem... for some reason picsize and takepic is not working in my Render Module... If anyone would know why, it would help I will keep trying until I get it to work but Im just not sure why it isnt working.
Turing:
type PixelValues : record
CLR :array1.. 3ofint2
Alpha :real4 endrecord
type Pixel : record
RGB : PixelValues
Depth :int1 endrecord
const AutoOverwrite :boolean:=true const TransperentColor :int1:=0 const LayerFileExtension :string:="lbm" var widthLayer, heightLayer :int2:=0 var posXLayer, posYLayer :int2:=0 var setColor : PixelValues
var scale :int2:=0 var depth :int1:=0 var layer :flexiblearray1.. 0of Pixel
var layerBoundSize :int:=0
setColor.CLR (1):=0
setColor.CLR (2):=0
setColor.CLR (3):=0
setColor.Alpha :=0 /*
PRIVATE METHODS
*/ procedure Resize (x, y :int)
widthLayer := x
heightLayer := y
layerBoundSize := widthLayer * heightLayer
var tempSize :int:=upper(layer) if layerBoundSize > upper(layer)then new layer, layerBoundSize
endif for i : tempSize + 1.. upper(layer)
layer (i).RGB.CLR (1):=0
layer (i).RGB.CLR (2):=0
layer (i).RGB.CLR (3):=0
layer (i).RGB.Alpha :=1
layer (i).Depth :=0 endfor end Resize
function GetColors (x :int):array0.. 3ofint var resultingValue :array0.. 3ofint%The Color values. var y :nat:=0%A temp variable to hold the value sent from the bitmap if x < 0then
y :=(maxnat) & (x) else
y := x
endif
for i :0.. 3%for all 4 values
resultingValue (3 - i):= y shr((3 - i)*8)%the color is equal to temp variable's value shift right (3-i)*8
y := y - (resultingValue (3 - i)shl((3 - i)*8))% the temp variable is subtracted by the color value shift left (3-i)*8 endfor% end for if y =0then result resultingValue
endif end GetColors
/*
PUBLIC METHODS
*/ procedure Capture (xPos1, yPos1, xPos2, yPos2 :int) var valID :int:=21 var b :array1.. sizepic(xPos1, yPos1, xPos2, yPos2)ofint var tempArray :array0.. 3ofint for i :1.. upper(b)
b (i):=0 endfor takepic(xPos1, yPos1, xPos2, yPos2, b)
Resize (b (2), b (1))
posXLayer := xPos1
posYLayer := yPos1
var imageID :int:=1 var imageColorShade :int:=0 for i : valID .. (b (13)div4) + valID - 1
tempArray := GetColors (b (i)) for j :0.. 3
imageColorShade := imageColorShade + 1
layer (imageID).RGB.CLR (imageColorShade):= tempArray (j) if imageColorShade > 2then
imageColorShade :=0
imageID := imageID + 1 endif endfor endfor end Capture
procedure CaptureAlpha (xPos1, yPos1, xPos2, yPos2 :int) var valID :int:=21 var b :array1.. sizepic(xPos1, yPos1, xPos2, yPos2)ofint var tempArray :array0.. 3ofint for i :1.. upper(b)
b (i):=0 endfor takepic(xPos1, yPos1, xPos2, yPos2, b)
Resize (b (2), b (1))
posXLayer := xPos1
posYLayer := yPos1
var imageID :int:=1 var imageColorShade :int:=0 for i : valID .. (b (13)div4) + valID - 1
tempArray := GetColors (b (i)) for j :0.. 3
imageColorShade := imageColorShade + 1
layer (imageID).RGB.Alpha := layer (imageID).RGB.Alpha + tempArray (j) if imageColorShade > 2then
imageColorShade :=0
layer (imageID).RGB.Alpha :=((layer (imageID).RGB.Alpha - 1)div3) / 255
imageID := imageID + 1 endif endfor endfor end CaptureAlpha
procedure Save (name :string) var saveName :string:= name + "." + LayerFileExtension
var fileStream :int:=0 ifFile.Exists(saveName)=truethen if AutoOverwrite then File.Delete(saveName) else Error.Halt("Auto Overide off, will implement other options later.") endif endif open: fileStream, saveName, put put: fileStream, intstr(layerBoundSize) + " "..
put: fileStream, intstr(widthLayer) + " "..
put: fileStream, intstr(heightLayer) + " "..
var tempValue :nat:=0 for i :1.. layerBoundSize
tempValue :=0 for j :1.. 3
tempValue| = layer (i).RGB.CLR (j)shl((j - 1)*8) endfor
tempValue| =round(254* layer (i).RGB.Alpha)shl24 put: fileStream, natstr(tempValue) + " "..
endfor close(fileStream) end Save
procedure Load (name :string) var loadName :string:= name + "." + LayerFileExtension
var fileStream :int
ifFile.Exists(loadName)=truethen var tempValue :string:="" open: fileStream, loadName, get get: fileStream, tempValue
layerBoundSize :=strint(tempValue) get: fileStream, tempValue
widthLayer :=strint(tempValue) get: fileStream, tempValue
heightLayer :=strint(tempValue)
Resize (widthLayer, heightLayer) var y :nat:=0 for i :1.. layerBoundSize
get: fileStream, tempValue
y :=strnat(tempValue)
layer (i).RGB.Alpha := y shr24
y := y - (round(layer (i).RGB.Alpha)shl24) for j :1.. 3
layer (i).RGB.CLR (4 - j):= y shr((3 - j)*8)%the color is equal to temp variable's value shift right (3-i)*8
y := y - (layer (i).RGB.CLR (4 - j)shl((3 - j)*8))% the temp variable is subtracted by the color value shift left (3-i)*8 endfor% endfor for i :1.. layerBoundSize
layer (i).RGB.Alpha := layer (i).RGB.Alpha / 255 endfor else Error.Halt("No file Found") endif end Load
procedure Display
var b :array1.. sizepic(1, 1, widthLayer, heightLayer)ofint takepic(1, 1, widthLayer, heightLayer, b) var valID :int:=21 for i : valID .. upper(b)
b (i):=0 endfor
b (7):=56 var imageID :int:=1 var imageColorShade :int:=0 for i : valID .. (b (13)div4) + valID - 1 for j :0.. 3
imageColorShade := imageColorShade + 1
b (i)| =round(layer (imageID).RGB.CLR (imageColorShade)* layer (imageID).RGB.Alpha)shl(j *8) if imageColorShade > 2then
imageColorShade :=0
imageID := imageID + 1 endif endfor
procedure DrawDot (x, y :int) if x < widthLayer + 1and x > 0and y < heightLayer + 1and y > 0then
layer ((y - 1)* widthLayer + x).RGB.CLR (3):= setColor.CLR (3)
layer ((y - 1)* widthLayer + x).RGB.CLR (2):= setColor.CLR (2)
layer ((y - 1)* widthLayer + x).RGB.CLR (1):= setColor.CLR (1) endif end DrawDot
procedure DrawOval (x, y, radX, radY :int) var perimeter :real:=3.1415* radX * radY
var angleInc :real:=360 / perimeter
for i :1.. round(perimeter)
DrawDot (x + round(radX *cosd(angleInc * i)), y + round(radY *sind(angleInc * i))) endfor end DrawOval
procedure DrawArc (x, y, radX, radY :int, initA, finishA :real) var perimeter :real:=(finishA - initA) / 360*3.1415* radX * radY
var angleInc :real:=(finishA - initA) / perimeter
for i :1.. round(perimeter)
DrawDot (x + round(radX *cosd(initA + angleInc * i)), y + round(radY *sind(initA + angleInc * i))) endfor end DrawArc
const ScreenDepth :int:=0 var screenBuffer :flexiblearray1.. 0of Pixel
var screenID :int:=0 var screenBound :int:=0 var screenWidth :int:=0 var screenHeight :int:=0 var screenSize :int:=0 var screenScale :real:=0 var backColor : PixelValues
backColor.CLR (1):=0
backColor.CLR (2):=0
backColor.CLR (3):=0
backColor.Alpha :=0
procedure Update
cls var b :array1.. screenSize ofint takepic(1, 1, screenWidth, screenHeight, b) var valID :int:=21 for i : valID .. upper(b)
b (i):=0 endfor
b (7):=56 var imageID :int:=1 var imageColorShade :int:=0 for i : valID .. (b (13)div4) + valID - 1 for j :0.. 3
imageColorShade := imageColorShade + 1
b (i)| = screenBuffer (imageID).RGB.CLR (imageColorShade)shl(j *8) if imageColorShade > 2then
imageColorShade :=0
imageID := imageID + 1 endif endfor
procedure SaveNewImage (name :string) var pic1 :int:=Pic.FileNew(name) Pic.Draw(pic1, 1, 1, picCopy) var imageTemp : ^Image
new Image, imageTemp
imageTemp -> Capture (1, 1, Pic.Width(pic1),Pic.Height(pic1))
imageTemp -> Save ("TestSaveFile1") Pic.Free(pic1) end SaveNewImage
SaveNewImage (#"imageName.bmp")
ClassTest1
copthesaint
Posted: Wed May 23, 2012 10:59 am Post subject: Re: New Draw Module
~Bump
I have my whole program working now, I will just remake the whole thing and clean it up. then I will post my first version for turing 4.0.5 that should be bug free.
I have already noticed an issue with speed however I will try to optimise my code while I remake it.