r3wp [groups: 83 posts: 189283]
  • Home
  • Script library
  • AltME Archive
  • Mailing list
  • Articles Index
  • Site search
 

World: r3wp

[View] discuss view related issues

Geomol
21-Dec-2006
[6474]
What data format is used for clipart? An importer to DRAW dialect 
shouldn't be too big a problem, if the format is easily read.
Henrik
21-Dec-2006
[6475]
yes! I've always wanted to see all that kitchy clipart available 
to Windows users since Windows 3.1...
Geomol
21-Dec-2006
[6476]
There is probably a lot stored in SVG (Scalable Vector Graphics) 
format. There's been talk about that format around here, I think.
Henrik
21-Dec-2006
[6477]
would be nice to integrate this into postscript.r (wink wink) :-)
Geomol
21-Dec-2006
[6478]
yeah! :-)
Maxim
21-Dec-2006
[6479x5]
here is a draw glyph compressor  :-)

rule: [
	any[
		[copy val pair! (
			val: first val
			bignum: max bignum max val/x val/y
			append bin to-binary to-char val/x
			append bin to-binary to-char val/y
		)] |

  [copy val word! (append bin select [curve #{81} line #{82} move #{83}] 
  val )]
	]
]
the above glyph takes up 2223 bytes
oops... forgot to remove bignum check...
rule: [
	any[
		[copy val pair! (
			val: first val
			append bin to-binary to-char val/x
			append bin to-binary to-char val/y
		)] |

  [copy val word! (append bin select [curve #{81} line #{82} move #{83}] 
  val )]
	]
]
to use it:

bin: copy #{}
parse draw-shape-block rule
Geomol
21-Dec-2006
[6484x2]
W3C link to this from their SVG page: http://openclipart.org/cchost/

so there's a lot of clipart in SVG format, I guess. SVG uses XML, 
so it should be easy to import using my RebXML packet. Problem is 
to figure out content  of the format.
Hmm, it seems to be a large format, so it's not a week-end project: 
http://www.w3.org/TR/SVG11/
Henrik
21-Dec-2006
[6486]
isn't shadwolf working on something?
Maxim
21-Dec-2006
[6487]
doesn't Cyphre already have an AGG SVG viewer
Henrik
21-Dec-2006
[6488]
how is the tiger demo done?
Geomol
21-Dec-2006
[6489]
There is a "SVG RENDERER" group here.
Maxim
21-Dec-2006
[6490x2]
my god profiling stuff in REBOL in quite rewarding!
my latest shape compressor is now 2.5 times faster, by using a list! 
instead of a binary while accumulating values, and then converting 
it to binary!
Geomol
21-Dec-2006
[6492]
Can you try a hash!?
Maxim
21-Dec-2006
[6493]
there is no point... since I'm never accessing it... list! is the 
fastest insert series in REBOL
Geomol
21-Dec-2006
[6494]
ok. Do you preallocate space for all the entries beforehand? So it 
doesn't have to expand along the way.
Maxim
21-Dec-2006
[6495x4]
and since I'm only converting it to binary at the end, a lot of GC 
processing is alleviated.
oh, and 1000 of the above glyphs now takes 4.5 seconds to compress... 
imagine if we had rebcode !
lst: make list! 5000

rule: [
	any[
		[copy val pair! (
			insert lst val/1/x
			insert lst val/1/y
		)] |

  [copy val word! (insert  lst select [curve 130 line 131 move 132] 
  val )]
	]
]
parse draw-shape rule
bin: to-binary head lst
clear head lst

lst: head lst  ; a small quirk in list! datatype... it MUST be reset 
to head after a clear.
and 1000 glyphs takes 8.95 MB of RAM which is quite optimal IMHO 
   :-)
Ashley
21-Dec-2006
[6499]
How does that compare with:

	glyph: compress mold draw-blk
	load decompress glyph
Maxim
21-Dec-2006
[6500x4]
didn't try, I was having fun with parsing  ;-)
using compress is 2 times faster but takes up 20% more ram
(in compression)
but there is no comparison in decompression... using decompress  
is 4 times faster so far.. I could probably squeze a bit more more 
out of parse... but not much.
Jerry
21-Dec-2006
[6504x4]
Maxim, it's not "tsai", it's "yung". The meaning is some kind of 
traditional chinese musical instruments. http://www.unicode.org/cgi-bin/GetUnihanData.pl?codepoint=93DE
Henrik, it is possible to draw all the characters this way, not just 
Chinese characters. I am designing my own Text-Rendering System this 
way.
To condense the font data, there is a better way. Almost every Chinese 
character consists of many parts. if reusing the parts, a Chinese 
TTF file can be condensed from 4 MB to 100 KB. However, doing that 
would need lots of analysis of Chinese characters. That's would not 
be easy. Also needed is a part-combining engine.
For example, the left part of the "yung" Chinese character is "jin", 
meaning "gold" or "metal". The left part of any  metal-related character 
is exactually the same as the left part of "yung". There are hundreds 
of such characters. And "metal" is just an example, we also have 
"water", "fire", "soil", "bird", "dog", "hand", "human", "tree" ... 
this list goes on and one.
Graham
21-Dec-2006
[6508]
Presumably that is how it is done.  Divide into radicals, and further 
divide radicals into elemental strokes.
Jerry
21-Dec-2006
[6509]
Graham. That's not how it is done. That's why the Chinese TTF file 
is so big, that's why in two chracters with the same radical, their 
radical part are not exactually the same pixel-by-pixel. These is 
a company doing so though. http://www.hifont.com/.
Graham
21-Dec-2006
[6510x2]
but you can add a scaling factor ..
and a direction
Jerry
21-Dec-2006
[6512]
Scaling factor and direction? I am afraid I dont understand what 
you mean. Anyway, I don't really have time to do the font-compression, 
and it's not practical for me for now. I am trying to change my bitmap-based 
text-rendering REBOL/View component to a vector-based one. I hope 
the performance will not cause too much pain. Considering the complexity 
of Chinese font, the rendering performance is what I am worring about.
Cyphre
22-Dec-2006
[6513x3]
Guys, that's exactly the way I have done 'embedded font' in the quick-hack.r 
demo I reffered some time ago when talking about the fonts. Yes it 
is possible to make any kind of font that way. And yes, DRAW is really 
good as a 'optimal storage' of vectorial data ;)
Jerry, I think you can implement own 'bitmap cache' when rendering 
the text usng vectorial glyphs. The performace will be much better 
in that case.
how is the tiger demo done?
 Yes, it's just converted SVG file to DRAW dialect, nothing more.
Geomol
22-Dec-2006
[6516]
Jerry, what about splitting each chinese character up in strokes. 
Each stroke should just be a number of points giving the position 
of the middle of the stroke from one end to the other. Like when 
a person draw the character with a pen. You start each stroke at 
one point, then you move your hand, sometimes fast, sometimes slow, 
until that stroke is finished. Then the next stroke and so on. The 
rendering engine can then calculate the thickness of the stroke at 
any time from the distance from point to point.
Gabriele
22-Dec-2006
[6517x2]
Geomol, you're describing the first version of Knuth's METAFONT :)
afaik it was then changed to just used bezier primitives (like draw) 
instead.
Maxim
22-Dec-2006
[6519x5]
if pieces of the glyphs are the same, then why not just assemble 
them within several draw shapes? and then just draw more than one 
single shape?  the memory tradeoff would be significant, yet the 
speed would likely be almost identical
and there is no "tricks" involved.  no recomputation of the way things 
are drawn.
in any case, a way to automate this is pretty easy IMHO. just do 
drawing and measure the amount of pixels which overlap wrt previously 
defined recurring shapes.  generate a view app which shows the highest 
matches in order and then a simple yes/no to confirm.
in a short amount of time you surely will have a sizeable amount 
of the glyphs reduced to a few recurring shapes!
since draw can reduce words on the fly, this also reduces the actual 
draw blocks used to express the glyphs... again, a sizeable memory 
saver.