赵 赵建东 Unregistered / Unconfirmed GUEST, unregistred user! 1998-10-06 #1 如一个园形图,只要把园边线的点阵图转换成矢量图数据,并且能控制矢量 数据的大小,像图形分辨有高低不同一样
H huizhang Unregistered / Unconfirmed GUEST, unregistred user! 1998-10-06 #2 最好是使用现成的软件, COREL DRAW 下的 COREL TRACE 很不错, 可以矢量化 线图, 色块图... 如果分辨率不高的话可以下载一个矢量化的 DEMO 软件 另外一个笨方法是直接用CAD软件将他描下来. 例如在ACAD下: 1. 创建一个新图 2. 将图像输入进来(BMPIN/GIFIN/TIFFIN...命令) 3. 将图像变比到实际尺寸 4. 在图像上方化矢量
最好是使用现成的软件, COREL DRAW 下的 COREL TRACE 很不错, 可以矢量化 线图, 色块图... 如果分辨率不高的话可以下载一个矢量化的 DEMO 软件 另外一个笨方法是直接用CAD软件将他描下来. 例如在ACAD下: 1. 创建一个新图 2. 将图像输入进来(BMPIN/GIFIN/TIFFIN...命令) 3. 将图像变比到实际尺寸 4. 在图像上方化矢量
赵 赵建东 Unregistered / Unconfirmed GUEST, unregistred user! 1998-10-06 #3 举例:一个直角三角形的点阵图,笛卡尔坐标 (0,0),(30,0),(0,40) 要求矢量数据输出是: 如以 (0,0)到 (30,0) (24,0),(3,0),(2,0),(1,0) 分段输出 原因是:外部设备虽然用步进马达,不易失真,可如果负荷重,下一步又要转弯,就回 失真,对策是提前减速,而外部设备一次处理一个(X,Y)数据,不能中途变速, 只能拆成几段,中间插入设备减速指令
举例:一个直角三角形的点阵图,笛卡尔坐标 (0,0),(30,0),(0,40) 要求矢量数据输出是: 如以 (0,0)到 (30,0) (24,0),(3,0),(2,0),(1,0) 分段输出 原因是:外部设备虽然用步进马达,不易失真,可如果负荷重,下一步又要转弯,就回 失真,对策是提前减速,而外部设备一次处理一个(X,Y)数据,不能中途变速, 只能拆成几段,中间插入设备减速指令
H huizhang Unregistered / Unconfirmed GUEST, unregistred user! 1998-10-06 #4 为什么一定要用点阵图呢? 图样应该直接用CAD软件绘制出来对呀. 看看我寄给你的 dxf 显示程序, 很容易加上自己的绘图命令。能够直接绘制矢量图 是最好不过了。否则从点阵转换到矢量麻烦不说,精度也不会很高。此外那些图样 不会很复杂,如果能过作一些模板绘起来会很容易的。
为什么一定要用点阵图呢? 图样应该直接用CAD软件绘制出来对呀. 看看我寄给你的 dxf 显示程序, 很容易加上自己的绘图命令。能够直接绘制矢量图 是最好不过了。否则从点阵转换到矢量麻烦不说,精度也不会很高。此外那些图样 不会很复杂,如果能过作一些模板绘起来会很容易的。
Y yysun Unregistered / Unconfirmed GUEST, unregistred user! 1998-10-06 #5 好象赵先生需要的是一些插值算法, 直线段插值方法大致如下: procedure DrawLine(x1, y1, x2, y2: integer); var k, xt, yt: single; dx: integer; begin xt := 1; //您的步进长度 if x2=x1 then begin if y2 > y1 then dx := abs(dx) else dx := -abs(dx) yt := y1; repeat plot(x1, yt); // 您的设备驱动接口 ... // 其他处理 yt := yt + dx; until yt = y2; end else begin k := (y2-y1) / (x2-x1); if x2 > x1 then dx := abs(dx) else dx := -abs(dx) xt := x1; repeat yt := k * (xt-x1) + y1; plot(xt, yt); // 您的设备驱动接口 ... // 其他处理 xt := xt + dx; until xt = x2; end; end; 圆弧和曲线有另外的的插值算法。 希望对您有所启示.
好象赵先生需要的是一些插值算法, 直线段插值方法大致如下: procedure DrawLine(x1, y1, x2, y2: integer); var k, xt, yt: single; dx: integer; begin xt := 1; //您的步进长度 if x2=x1 then begin if y2 > y1 then dx := abs(dx) else dx := -abs(dx) yt := y1; repeat plot(x1, yt); // 您的设备驱动接口 ... // 其他处理 yt := yt + dx; until yt = y2; end else begin k := (y2-y1) / (x2-x1); if x2 > x1 then dx := abs(dx) else dx := -abs(dx) xt := x1; repeat yt := k * (xt-x1) + y1; plot(xt, yt); // 您的设备驱动接口 ... // 其他处理 xt := xt + dx; until xt = x2; end; end; 圆弧和曲线有另外的的插值算法。 希望对您有所启示.
P pigprince Unregistered / Unconfirmed GUEST, unregistred user! 1998-10-06 #6 应是涉及两个算法: 1. 边缘判断算法:判断图像的边缘在位图上的位置坐标. 2.边缘跟踪算法:就是在图像的外面转一圈,同时进行矢量化 控制矢量的精度,同你所采用的矢量系统有关。
P pigprince Unregistered / Unconfirmed GUEST, unregistred user! 1998-10-06 #7 应是涉及两个算法: 1. 边缘判断算法:判断图像的边缘在位图上的位置坐标. 2.边缘跟踪算法:就是在图像的外面转一圈,同时进行矢量化 控制矢量的精度,同你所采用的矢量系统有关。
赵 赵建东 Unregistered / Unconfirmed GUEST, unregistred user! 1998-10-06 #8 1: 把 *.BMP 图像矢量化,是想把老的手工绘制的图像转到,好容易编辑,移动,缩放等 2: 基本像 "pigprince"思路,补充: 如平面一张纸,中间打个洞,则矢量数据除 了纸的边缘外,还要中间洞的边缘的矢量数据 3: 由于外部设备只能接收 shortInt 格式,如果矢量数据溢出,则能分段输出, 故希望程序能参与矢量过程. 4: 精度: 0.01~0.025 mm 扫描仪光学精度能达到 300线,应该可满足要求
1: 把 *.BMP 图像矢量化,是想把老的手工绘制的图像转到,好容易编辑,移动,缩放等 2: 基本像 "pigprince"思路,补充: 如平面一张纸,中间打个洞,则矢量数据除 了纸的边缘外,还要中间洞的边缘的矢量数据 3: 由于外部设备只能接收 shortInt 格式,如果矢量数据溢出,则能分段输出, 故希望程序能参与矢量过程. 4: 精度: 0.01~0.025 mm 扫描仪光学精度能达到 300线,应该可满足要求
P pigprince Unregistered / Unconfirmed GUEST, unregistred user! 1998-10-07 #9 如果是你说的第2种情况,是在实心图的内部进行填充算法, 再次进行边缘算法. 如果只求简单不求速度可以用线扫描算法.
赵 赵建东 Unregistered / Unconfirmed GUEST, unregistred user! 1998-10-07 #10 我可取得边缘点坐标后,想得到一个转换成矢量的算法源程序. 如一系列点在一定角度内,完全可用一条直线 Line(x1,y1,x2,y2)来完成, 好像把 点阵字体 扫描成 矢量轮廓字体的算法
H huizhang Unregistered / Unconfirmed GUEST, unregistred user! 1998-10-08 #12 推荐一本书你自己去啃吧, 里面有 C 语言的源码 C 环境下地图图像矢量化及图形编辑技术与实例 1993年 林春蔚 等编著 海洋出版社出版 ISBN 7-5027-3529-1 /TP.196
赵 赵建东 Unregistered / Unconfirmed GUEST, unregistred user! 1998-10-09 #13 谢谢诸位,我将联系斑竹,把分数分该 "HuiZhand"和"PigPrince"兄. 可怜的我,没有回头路,如果以后成功,将回告大家.
A angelsoft Unregistered / Unconfirmed GUEST, unregistred user! 2000-07-25 #14 我也正在研究这个问题,希望能和你交流 my email: yzsljh@elong.com my oicq: 758339