乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 72|回复: 1

[编程交流] MrSid图像大小

[复制链接]

2

主题

5

帖子

3

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-6 10:24:43 | 显示全部楼层 |阅读模式
你好
 
首先是一点背景知识。我有一些大量的MrSid(sid文件)和相应的sdw文件来告诉我们应该在哪里以及如何插入图像的信息。该文件如下所示:
 
我想要构建的是一个“数据库”,可以通过lisp例程进行搜索。工作流程如下:
命令:Src\u img
请选择一个点:
要插入>
 
现在,虽然此列表中的所有内容都很琐碎,但我似乎很难检索Autocad环境中出现的外来文件类型的大小(如sid)(如果您愿意,请使用wold大小)。对于其他文件,我使用了在web上找到的技巧(VBA):
 
  1. Set objFolder = obj_Shell.Namespace(FilePth)
  2. Set objFile = objFolder.ParseName(FileName)
  3. objFile.ExtendedProperty("Dimensions")

 
这给了我们以像素为单位的大小。有了前面介绍的比例,计算右下角的坐标也很简单。
 
现在的问题是:
您知道使用lisp或vba获取sid图像大小(像素或世界大小)的方法吗?我甚至可以递归地搜索文件夹中的sid文件,加载它们,检索右下角,卸载,然后一步一步地执行。
 
顺便说一句,我已经从LizardTech下载了sdk,我会看看能从那里得到什么。
 
非常感谢您的真知灼见!
祝你有美好的一天!
刻痕
 
PS我给了你们很多信息,只是为了避免阅读我已经知道的东西。很抱歉
回复

使用道具 举报

2

主题

5

帖子

3

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-6 11:31:20 | 显示全部楼层
我只是来这里获取一些ObjectARX信息,我记得没有答案。我这样做了(在Autocad Land Desktop 2007上):
 
-excel工作表(代码中由EXCSheet引用),其中包含第1列中所有图像的完整路径和名称
-FILEDIA设置为0
 
  1.    With EXCSheet
  2.        i = 4
  3.        Do
  4. RetryIns:
  5.            ThisDrawing.SendCommand ("MAPIINSERT" & vbCrLf)
  6.            ThisDrawing.SendCommand ("""" & .Cells(i, 1).Value & """" & vbCrLf)
  7.            DoEvents
  8.            Sleep 2000 ' maybe less
  9.            ThisDrawing.SendCommand ("N" & vbCrLf) ' answer no
  10.            ' this is he only image in the drawing (empty drawing)
  11.            For Each a In ThisDrawing.ModelSpace
  12.                If (TypeOf a Is AcadRasterImage) Then
  13.                    Set the_img = a
  14.                    insp = the_img.Origin ' insertion may fail to place image
  15.                    If (insp(0) = 0) And (insp(1) = 0) Then
  16.                        the_img.Delete ' if so, we should retry
  17.                        GoTo RetryIns
  18.                    End If
  19.                   
  20.                   
  21.                    Call the_img.GetBoundingBox(minp, maxp)
  22.                    ' you may save bounding box here
  23.                    scl_ty = ThisDrawing.GetVariable("INSUNITS")
  24.                    Call ThisDrawing.SetVariable("INSUNITS", 0)                    
  25.                    ' save here the_img.Rotation and the_img.ScaleFactor
  26.                    Call ThisDrawing.SetVariable("INSUNITS", scl_ty)
  27.                    ' maybe you need maximum/ minimum values... this is the place
  28.                    the_img.Delete ' no need for this image any more
  29.                    Exit For
  30.                End If
  31.            Next a
  32.            
  33.            i = i + 1
  34.        Loop Until .Cells(i, 1).Value = ""
  35.    End With
  36.    

 
代码可能看起来很奇怪,因为将值保存到excel表的部分被剥离了,但这只是一般的想法。
 
顺致敬意,
刻痕
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-6 22:07 , Processed in 0.318251 second(s), 56 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表