用lisp转换图片格式 png2bmp
本帖最后由 baitang36 于 2024-6-12 05:42 编辑;把png文件转化为bmp文件;baitang36 2024-6-11 JN ;感谢高飞鸟大侠的大力支持
(vl-load-com)
(defun GetSpecialPath (n / fso path)
(setq fso(vlax-create-object "Scripting.FileSystemObject"))
(setq path (vlax-get (vlax-invoke fso 'GetSpecialFolder n) 'path))
(vlax-release-object fso)
path
)
(defun png2bmp( source target/ path Img IPr vec cnt col old val fil i new)
(setq path (strcat (getSpecialPath 1) "\\wiaaut.dll"))
(if (not ic-actionEvent)
(vlax-import-type-library
:tlb-filenamepath
:methods-prefix "im-"
:properties-prefix "ip-"
:constants-prefix "ic-"
)
)
(setq Img (vlax-create-object "WIA.ImageFile"))
(setq IPr(vlax-create-object "WIA.ImageProcess"))
(im-loadfile Img source) ;"c:\\00\\1.png"
;(setq kuan(vlax-get-property img "Width"))
; (setq gao(vlax-get-property img "Height"))
; (princ kuan)(princ "*")(princ gao)(princ"\n")
(setq fil (ip-get-Filters IPr))
(im-add fil (ip-get-filterID (ip-get-item (ip-get-filterinfos IPr) "Convert")) 0)
(ip-put-value (ip-get-item (ip-get-Properties (ip-get-item fil 1)) "FormatID") "{B96B3CAB-0728-11D3-9D7B-0000F81EF32E}")
(setq new (im-applyIPr Img))
(im-savefile new target ) ;("c:\\00\\2.bmp")
(vlax-release-object Img)
(vlax-release-object IPr)
(vlax-release-object fil)
(vlax-release-object new)
(princ)
)
;用法:(PNG2BMP "c:/00/1.png" "c:/00/1.bmp")
我的想法是这样的:
1.直接从dwg中挖出png缩略图
2.png2bmp
3.bmp2sld
4.实现dcl直接预览dwg
这种做法比命令行mslide要快的多,特别是dwg文件非常大的时候
第一步和第三步是难点,第一步需要研究png在dwg中的位置,读写二进制文件。
欢迎有兴趣的朋友一起玩。
本帖最后由 baitang36 于 2024-6-13 06:34 编辑
kozmosovia 发表于 2024-6-12 10:57
1:缩略图可以直接导出为BMP的,不需要PNG作为媒介。
2:BMP到SLD属于点阵到矢量,有图形到矢量的转换能 ...
acad2018及以后版本的dwg缩略图是png格式的,低版本的cad是bmp,更低版本的(如autoCAD10.0版)缩略图直接就是sld。有的版本的dwg没有缩略图。
bmp到sld确实是点阵到矢量的转换,只要做好水平线和竖直线的矢量化就行,斜线显示本来就是锯齿形的,用点描出来效果也可以接受。
dwg缩略图的尺寸都很小的,不超过256*256,png文件的大小不超过64k,sld达到几兆的可能性是不存在的。256*256的点阵每个点用8个字节表示是512k,不可超过这个数的。
本帖最后由 kozmosovia 于 2024-6-12 11:00 编辑
baitang36 发表于 2024-6-12 05:40
我的想法是这样的:
1.直接从dwg中挖出png缩略图
2.png2bmp
1:缩略图可以直接导出为BMP的,不需要PNG作为媒介。
2:BMP到SLD属于点阵到矢量,有图形到矢量的转换能力的程序也不多见。同时,以DWG缩略图的点阵精度,矢量转出来大概率也是惨不忍睹。
3:整体上还不如直接WMFOUT,WMFIN成为图块,读取图块内元素图形在Image显示来的更加顺畅。
4:DWX支持直接在Image范围内填充BMP图形,速度比BMP转SLD快的多:直接CAD内黏贴BMP,放大到图片区域MSLIDE生成的SLD文件动辄10几M,Image显示起来卡的要死。
kozmosovia 发表于 2024-6-11 23:39
用处其实不大。也没啥应用场景。
我的想法是这样的:
1.直接从dwg中挖出png缩略图
2.png2bmp
3.bmp2sld
4.实现dcl直接预览dwg
这种做法比命令行mslide要快的多,特别是dwg文件非常大的时候
第一步和第三步是难点,第一步需要研究png在dwg中的位置,读写二进制文件。
这个不错,查了一下,WIA能干的事情还有很多 陨落 发表于 2024-6-11 17:21
这个不错,查了一下,WIA能干的事情还有很多
还能做什么?? 陨落 发表于 2024-6-11 17:21
这个不错,查了一下,WIA能干的事情还有很多
给大家科谱一下呀! 顶老哥,这个待下一步开发主要是作用大,。 谢谢盛老师的无私分享。 谢谢盛老师的无私分享。:handshake 感谢大佬的分享! 用处其实不大。也没啥应用场景。