Data update
This commit is contained in:
parent
8e4e15fa56
commit
72eb4943cb
1853 changed files with 35514 additions and 9441 deletions
|
|
@ -1,48 +0,0 @@
|
|||
# -*- coding: utf-8 -*- #
|
||||
|
||||
MODE PIXEL = STRUCT(#SHORT# BITS red,green,blue);
|
||||
MODE POINT = STRUCT(INT x,y);
|
||||
|
||||
MODE IMAGE = [0,0]PIXEL; # instance attributes #
|
||||
|
||||
MODE CLASSIMAGE = STRUCT ( # class attributes #
|
||||
PIXEL black, red, green, blue, white,
|
||||
PROC (REF IMAGE)REF IMAGE init,
|
||||
PROC (REF IMAGE, PIXEL)VOID fill,
|
||||
PROC (REF IMAGE)VOID print,
|
||||
# virtual: #
|
||||
REF PROC (REF IMAGE, POINT, POINT, PIXEL)VOID line,
|
||||
REF PROC (REF IMAGE, POINT, INT, PIXEL)VOID circle,
|
||||
REF PROC (REF IMAGE, POINT, POINT, POINT, POINT, PIXEL, UNION(INT, VOID))VOID cubic bezier
|
||||
);
|
||||
|
||||
CLASSIMAGE class image = (
|
||||
# black = # (#SHORTEN# 16r00, #SHORTEN# 16r00, #SHORTEN# 16r00),
|
||||
# red = # (#SHORTEN# 16rff, #SHORTEN# 16r00, #SHORTEN# 16r00),
|
||||
# green = # (#SHORTEN# 16r00, #SHORTEN# 16rff, #SHORTEN# 16r00),
|
||||
# blue = # (#SHORTEN# 16r00, #SHORTEN# 16r00, #SHORTEN# 16rff),
|
||||
# white = # (#SHORTEN# 16rff, #SHORTEN# 16rff, #SHORTEN# 16rff),
|
||||
# PROC init = # (REF IMAGE self)REF IMAGE:
|
||||
BEGIN
|
||||
(fill OF class image)(self, black OF class image);
|
||||
self
|
||||
END,
|
||||
|
||||
# PROC fill = # (REF IMAGE self, PIXEL color)VOID:
|
||||
FOR x FROM 1 LWB self TO 1 UPB self DO
|
||||
FOR y FROM 2 LWB self TO 2 UPB self DO
|
||||
self[x,y] := color
|
||||
OD
|
||||
OD,
|
||||
# PROC print = # (REF IMAGE self)VOID:
|
||||
printf(($n(UPB self)(3(16r2d))l$, self)),
|
||||
# virtual: #
|
||||
# REF PROC line = # LOC PROC (REF IMAGE, POINT, POINT, PIXEL)VOID,
|
||||
# REF PROC circle = # LOC PROC (REF IMAGE, POINT, INT, PIXEL)VOID,
|
||||
# REF PROC cubic bezier = # LOC PROC (REF IMAGE, POINT, POINT, POINT, POINT, PIXEL, UNION(INT, VOID))VOID
|
||||
);
|
||||
|
||||
OP CLASSOF = (IMAGE image)CLASSIMAGE: class image;
|
||||
OP INIT = (REF IMAGE image)REF IMAGE: (init OF (CLASSOF image))(image);
|
||||
|
||||
SKIP
|
||||
|
|
@ -1,72 +1,102 @@
|
|||
\ Bitmap width in pixels, height in pixels
|
||||
\ Return a group object with some lambda as members: SetPixel, GetPixel, Image$
|
||||
\ copyimage
|
||||
\ using Copy x, y Use Image$ we can display image$ to x, y as twips
|
||||
\ we can use x*twipsx, y*twipsy for x,y as pixels
|
||||
Function Bitmap (x as long, y as long) {
|
||||
if x<1 or y<1 then Error "Wrong dimensions"
|
||||
structure rgb {
|
||||
red as byte
|
||||
green as byte
|
||||
blue as byte
|
||||
}
|
||||
m=len(rgb)*x mod 4
|
||||
if m>0 then m=4-m ' add some bytes to raster line
|
||||
m+=len(rgb) *x
|
||||
Structure rasterline {
|
||||
{
|
||||
pad as byte*m
|
||||
Module Checkit {
|
||||
Function Bitmap (x as long, y as long) {
|
||||
if x<1 or y<1 then Error "Wrong dimensions"
|
||||
structure rgb {
|
||||
red as byte
|
||||
green as byte
|
||||
blue as byte
|
||||
}
|
||||
m=len(rgb)*x mod 4
|
||||
if m>0 then m=4-m ' add some bytes to raster line
|
||||
m+=len(rgb) *x
|
||||
Structure rasterline {
|
||||
{
|
||||
pad as byte*m
|
||||
}
|
||||
\\ union pad+hline
|
||||
hline as rgb*x
|
||||
}
|
||||
\\ union pad+hline
|
||||
hline as rgb*x
|
||||
}
|
||||
|
||||
Structure Raster {
|
||||
magic as integer*4
|
||||
w as integer*4
|
||||
h as integer*4
|
||||
lines as rasterline*y
|
||||
}
|
||||
Buffer Clear Image1 as Raster
|
||||
\\ 24 chars as header to be used from bitmap render build in functions
|
||||
Return Image1, 0!magic:="cDIB", 0!w:=Hex$(x,2), 0!h:=Hex$(y, 2)
|
||||
\\ fill white (all 255)
|
||||
\\ Str$(string) convert to ascii, so we get all characters from words width to byte width
|
||||
Return Image1, 0!lines:=Str$(String$(chrcode$(255), Len(rasterline)*y))
|
||||
Buffer Clear Pad as Byte*4
|
||||
SetPixel=Lambda Image1, Pad,aLines=Len(Raster)-Len(Rasterline), blines=-Len(Rasterline) (x, y, c) ->{
|
||||
where=alines+3*x+blines*y
|
||||
if c>0 then c=color(c)
|
||||
c-!
|
||||
Return Pad, 0:=c as long
|
||||
Return Image1, 0!where:=Eval(Pad, 2) as byte, 0!where+1:=Eval(Pad, 1) as byte, 0!where+2:=Eval(Pad, 0) as byte
|
||||
Structure Raster {
|
||||
magic as integer*4
|
||||
w as integer*4
|
||||
h as integer*4
|
||||
lines as rasterline*y
|
||||
}
|
||||
Buffer Clear Image1 as Raster
|
||||
\\ 24 chars as header to be used from bitmap render build in functions
|
||||
Return Image1, 0!magic:="cDIB", 0!w:=Hex$(x,2), 0!h:=Hex$(y, 2)
|
||||
\\ fill white (all 255)
|
||||
\\ Str$(string) convert to ascii, so we get all characters from words width to byte width
|
||||
Return Image1, 0!lines:=Str$(String$(chrcode$(255), Len(rasterline)*y))
|
||||
Buffer Clear Pad as Byte*4
|
||||
SetPixel=Lambda Image1, Pad,aLines=Len(Raster)-Len(Rasterline), blines=-Len(Rasterline) (x, y, c) ->{
|
||||
where=alines+3*x+blines*y
|
||||
if c>0 then c=color(c)
|
||||
c-!
|
||||
Return Pad, 0:=c as long
|
||||
Return Image1, 0!where:=Eval(Pad, 2) as byte, 0!where+1:=Eval(Pad, 1) as byte, 0!where+2:=Eval(Pad, 0) as byte
|
||||
|
||||
}
|
||||
GetPixel=Lambda Image1,aLines=Len(Raster)-Len(Rasterline), blines=-Len(Rasterline) (x,y) ->{
|
||||
where=alines+3*x+blines*y
|
||||
=color(Eval(image1, where+2 as byte), Eval(image1, where+1 as byte), Eval(image1, where as byte))
|
||||
}
|
||||
StrDib$=Lambda$ Image1, Raster -> {
|
||||
=Eval$(Image1, 0, Len(Raster))
|
||||
}
|
||||
CopyImage=Lambda Image1 (image$) -> {
|
||||
if left$(image$,12)=Eval$(Image1, 0, 24 ) Then {
|
||||
Return Image1, 0:=Image$
|
||||
} Else Error "Can't Copy Image"
|
||||
}
|
||||
Export2File=Lambda Image1, x, y, r=len(rasterline) (f) -> {
|
||||
\\ use this between open and close
|
||||
Print #f, "P3"
|
||||
Print #f,"# Created using M2000 Interpreter"
|
||||
Print #f, x;" ";y
|
||||
Print #f, 255
|
||||
x2=x-1
|
||||
For y1= y-1 to 0 {
|
||||
a$=""
|
||||
where=24+r*y1
|
||||
x1=0
|
||||
Print #f, Eval(Image1, where +2 as byte);" ";
|
||||
Print #f, Eval(Image1, where+1 as byte);" ";
|
||||
Print #f, Eval(Image1, where as byte);
|
||||
where+=3
|
||||
For x1=1 to x2 {
|
||||
Print #f, " ";Eval(Image1, where +2 as byte);" ";
|
||||
Print #f, Eval(Image1, where+1 as byte);" ";
|
||||
Print #f, Eval(Image1, where as byte);
|
||||
where+=3
|
||||
}
|
||||
Print #f
|
||||
}
|
||||
}
|
||||
Group Bitmap {
|
||||
SetPixel=SetPixel
|
||||
GetPixel=GetPixel
|
||||
Image$=StrDib$
|
||||
Copy=CopyImage
|
||||
ToFile=Export2File
|
||||
}
|
||||
=Bitmap
|
||||
}
|
||||
GetPixel=Lambda Image1,aLines=Len(Raster)-Len(Rasterline), blines=-Len(Rasterline) (x,y) ->{
|
||||
where=alines+3*x+blines*y
|
||||
=color(Eval(image1, where+2 as byte), Eval(image1, where+1 as byte), Eval(image1, where as byte))
|
||||
A=Bitmap(150,100)
|
||||
For i=0 to 98 {
|
||||
Call A.SetPixel(i, i, 5)
|
||||
Call A.SetPixel(99, i, color(128,0,255))
|
||||
}
|
||||
StrDib$=Lambda$ Image1, Raster -> {
|
||||
=Eval$(Image1, 0, Len(Raster))
|
||||
}
|
||||
CopyImage=Lambda Image1 (image$) -> {
|
||||
if left$(image$,12)=Eval$(Image1, 0, 24 ) Then {
|
||||
Return Image1, 0:=Image$
|
||||
} Else Error "Can't Copy Image"
|
||||
}
|
||||
Group Bitmap {
|
||||
SetPixel=SetPixel
|
||||
GetPixel=GetPixel
|
||||
Image$=StrDib$
|
||||
Copy=CopyImage
|
||||
}
|
||||
=Bitmap
|
||||
Call A.SetPixel(i,i,0)
|
||||
Call A.SetPixel(30,50, color(128,0,255))
|
||||
Print A.GetPixel(30,50)=color(128,0,255)
|
||||
move 3000, 3000
|
||||
Image A.image$()
|
||||
profiler
|
||||
Open "A2.PPM" for Output as #F
|
||||
Call A.ToFile(F)
|
||||
Close #f
|
||||
print timecount
|
||||
}
|
||||
A=Bitmap(100,100)
|
||||
Call A.SetPixel(50,50, color(128,0,255))
|
||||
Print A.GetPixel(50,50)=color(128,0,255)
|
||||
\\ display image to screen at 100, 50 pixel
|
||||
copy 100*twipsx,50*twipsy use A.Image$()
|
||||
A1=Bitmap(100,100)
|
||||
Call A1.copy(A.Image$())
|
||||
copy 500*twipsx,50*twipsy use A1.Image$()
|
||||
Checkit
|
||||
|
|
|
|||
|
|
@ -1,55 +1,57 @@
|
|||
Module P6 {
|
||||
Function Bitmap {
|
||||
def x as long, y as long, Import as boolean
|
||||
|
||||
If match("NN") then {
|
||||
If match("NN") then
|
||||
Read x, y
|
||||
} else.if Match("N") Then {
|
||||
else.if Match("N") Then
|
||||
\\ is a file?
|
||||
Read f as long
|
||||
buffer whitespace as byte
|
||||
if not Eof(f) then {
|
||||
get #f, whitespace :P6$=eval$(whitespace)
|
||||
get #f, whitespace : P6$+=eval$(whitespace)
|
||||
def boolean getW=true, getH=true, getV=true
|
||||
def long v
|
||||
\\ str$("P6") has 2 bytes. "P6" has 4 bytes
|
||||
If p6$=str$("P6") Then {
|
||||
do {
|
||||
byte whitespace[0]
|
||||
if not Eof(f) then
|
||||
get #f, whitespace :P6$=chr$(whitespace[0])
|
||||
get #f, whitespace : P6$+=chr$(whitespace[0])
|
||||
boolean getW=true, getH=true, getV=true
|
||||
long v
|
||||
If p6$="P6" Then
|
||||
do
|
||||
get #f, whitespace
|
||||
if Eval$(whitespace)=str$("#") then {
|
||||
do {get #f, whitespace} until eval(whitespace)=10
|
||||
} else {
|
||||
select case eval(whitespace)
|
||||
case 32, 9, 13, 10
|
||||
{ if getW and x<>0 then {
|
||||
getW=false
|
||||
} else.if getH and y<>0 then {
|
||||
getH=false
|
||||
} else.if getV and v<>0 then {
|
||||
getV=false
|
||||
}
|
||||
}
|
||||
case 48 to 57
|
||||
{if getW then {
|
||||
x*=10
|
||||
x+=eval(whitespace, 0)-48
|
||||
} else.if getH then {
|
||||
y*=10
|
||||
y+=eval(whitespace, 0)-48
|
||||
} else.if getV then {
|
||||
v*=10
|
||||
v+=eval(whitespace, 0)-48
|
||||
}
|
||||
}
|
||||
End Select
|
||||
select case whitespace[0]
|
||||
case 35
|
||||
{do get #f, whitespace
|
||||
until whitespace[0]=10
|
||||
}
|
||||
case 32, 9, 13, 10
|
||||
{ if getW and x<>0 then
|
||||
getW=false
|
||||
else.if getH and y<>0 then
|
||||
getH=false
|
||||
else.if getV and v<>0 then
|
||||
getV=false
|
||||
end if
|
||||
}
|
||||
case 48 to 57
|
||||
{if getW then
|
||||
x*=10
|
||||
x+=whitespace[0]-48
|
||||
else.if getH then
|
||||
y*=10
|
||||
y+=whitespace[0]-48
|
||||
else.if getV then
|
||||
v*=10
|
||||
v+=whitespace[0]-48
|
||||
end if
|
||||
}
|
||||
End Select
|
||||
iF eof(f) then Error "Not a ppm file"
|
||||
} until getV=false
|
||||
} else Error "Not a P6 ppm"
|
||||
until getV=false
|
||||
else
|
||||
Error "Not a P6 ppm"
|
||||
end if
|
||||
Import=True
|
||||
}
|
||||
} else Error "No proper arguments"
|
||||
end if
|
||||
else
|
||||
Error "No proper arguments"
|
||||
end if
|
||||
if x<1 or y<1 then Error "Wrong dimensions"
|
||||
structure rgb {
|
||||
red as byte
|
||||
|
|
@ -78,7 +80,7 @@ Module P6 {
|
|||
Return Image1, 0!magic:="cDIB", 0!w:=Hex$(x,2), 0!h:=Hex$(y, 2)
|
||||
if not Import then Return Image1, 0!lines:=Str$(String$(chrcode$(255), Len(rasterline)*y))
|
||||
Buffer Clear Pad as Byte*4
|
||||
SetPixel=Lambda Image1, Pad,aLines=Len(Raster)-Len(Rasterline), blines=-Len(Rasterline) (x, y, c) ->{
|
||||
SetPixel=Lambda Image1, Pad, aLines=Len(Raster)-Len(Rasterline), blines=-Len(Rasterline) (x, y, c) ->{
|
||||
where=alines+3*x+blines*y
|
||||
if c>0 then c=color(c)
|
||||
c-!
|
||||
|
|
@ -101,23 +103,41 @@ Module P6 {
|
|||
Print #f, "P6";chr$(10);"# Created using M2000 Interpreter";chr$(10);
|
||||
Print #f, x;" ";y;" 255";chr$(10);
|
||||
x2=x-1 : where=0
|
||||
Buffer pad as byte*3
|
||||
For y1= 0 to y-1 {
|
||||
For x1=0 to x2 {
|
||||
Return pad, 0:=eval$(image1, 0!linesB!where, 3)
|
||||
Push Eval(pad, 2) : Return pad, 2:=Eval(pad, 0), 0:=Number
|
||||
Put #f, pad : where+=3
|
||||
}
|
||||
x0=x*3
|
||||
structure rgbP6 {
|
||||
r as byte
|
||||
g as byte
|
||||
b as byte
|
||||
}
|
||||
buffer Pad as rgbP6*x*y
|
||||
For y1=y-1 to 0 {
|
||||
Return pad, x*y1:=eval$(image1, 0!linesB!where, x0)
|
||||
where+=x0
|
||||
m=where mod 4 : if m<>0 then where+=4-m
|
||||
}
|
||||
For x1=0 to x*y-1 {
|
||||
Push Eval(pad, x1!b) : Return pad, x1!b:=Eval(pad, x1!r), x1!r:=Number
|
||||
}
|
||||
Put #f, pad
|
||||
}
|
||||
if Import then {
|
||||
x0=x-1 : where=0
|
||||
Buffer Pad1 as byte*3
|
||||
For y1=y-1 to 0 {
|
||||
For x1=0 to x0 {Get #f, Pad1 : Push Eval(pad1, 2) : Return pad1, 2:=Eval(pad1, 0), 0:=Number
|
||||
Return Image1, 0!linesB!where:=Eval$(Pad1) : where+=3}
|
||||
m=where mod 4 : if m<>0 then where+=4-m}
|
||||
x0=x-1 : where=0
|
||||
structure rgbP6 {
|
||||
r as byte
|
||||
g as byte
|
||||
b as byte
|
||||
}
|
||||
buffer Pad1 as rgbP6*x*y
|
||||
Get #f, Pad1
|
||||
For x1=0 to x*y-1 {
|
||||
Push Eval(pad1, x1!b) : Return pad1, x1!b:=Eval(pad1, x1!r), x1!r:=Number
|
||||
}
|
||||
x1=x*3
|
||||
For y1=y-1 to 0 {
|
||||
Return Image1, 0!linesB!where:=Eval$(Pad1, y1*x, x1)
|
||||
where+=3*(x0+1)
|
||||
m=where mod 4 : if m<>0 then where+=4-m
|
||||
}
|
||||
}
|
||||
Group Bitmap {
|
||||
SetPixel=SetPixel
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue