关于“类型不匹配”的错误

sxlhl365 2011-05-25 01:12:26
我用以下程序获取psd文档中某个像素(x,y)的颜色值,运行到最后一句出现“类型不匹配”的错误,请高手解决一下。

public appRef As Object, docRef As Object

sub getColor(X As Integer, Y As Integer)

Set appRef = CreateObject("Photoshop.Application")
Set docRef = appRef.Open("c:\a.psd")
docRef.Selection.Select Array(Array(X, Y), Array(X + 1, Y), Array(X + 1, Y + 1), Array(X, Y + 1))
getcolor=docRef.channels(1).Histogram(1)

end sub

...全文
216 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
sxlhl365 2011-12-30
  • 打赏
  • 举报
回复
问题已经解决,原来是引用的方式发生变化
sxlhl365 2011-10-20
  • 打赏
  • 举报
回复
再顶一下,期待高手
sxlhl365 2011-06-10
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 wallescai 的回复:]
可最后一句是End Sub呀
[/Quote]

输入错误,已改了,没用的
熊孩子开学喽 2011-06-03
  • 打赏
  • 举报
回复
可最后一句是End Sub呀
sxlhl365 2011-05-30
  • 打赏
  • 举报
回复
再来个对象的调试截图,3楼的实际是把Histogram属性展开而以,

我把问题再描述一下:

我用以下程序获取psd文档中某个像素(x,y)的颜色值,运行到最后一句出现“类型不匹配”的错误
Private Function getColor(X As Integer, Y As Integer) As integer
Set appRef = CreateObject("Photoshop.Application")
Set docRef = appRef.Open("c:\ss.psd")
docRef.Selection.Select Array(Array(X, Y), Array(X + 1, Y), Array(X + 1, Y + 1), Array(X, Y + 1))
getColor = docRef.channels(1).Histogram(1)
End Function


但如果在工程中引用adobe photoshop 8.0 object library库,再对变量appRef和docref作如下定义,程序就正常了,但如果安装了不同版本的photoshop,需要引用不同的库,局限性较大

Private Function getColor(X As Integer, Y As Integer) As integer
Dim appRef As New Photoshop.Application
Dim docref As Photoshop.Document

Set docRef = appRef.Open("c:\ss.psd")
docRef.Selection.Select Array(Array(X, Y), Array(X + 1, Y), Array(X + 1, Y + 1), Array(X, Y + 1))
getColor = docRef.channels(1).Histogram(1)

End Function
sxlhl365 2011-05-29
  • 打赏
  • 举报
回复
还是没人能解答,自己顶一下
sxlhl365 2011-05-26
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 zzyong00 的回复:]
channels下级不是Histogram
[/Quote]

从监视界面上看,histogram就是channels下级,没错
zzyong00 2011-05-25
  • 打赏
  • 举报
回复
channels下级不是Histogram
clear_zero 2011-05-25
  • 打赏
  • 举报
回复
你是一个sub,却要有返回值?

你把你头一个sub改成function试试看
sxlhl365 2011-05-25
  • 打赏
  • 举报
回复
如果在工程中引用adobe photoshop object library库,再对变量appRef和docref作如下定义,程序就正常了,但需要引用库,局限性较大

Private Function getColor(X As Integer, Y As Integer) As Long
Dim appRef As New Photoshop.Application
Dim docref As Photoshop.Document

Set docRef = appRef.Open("c:\ss.bmp")
docRef.Selection.Select Array(Array(X, Y), Array(X + 1, Y), Array(X + 1, Y + 1), Array(X, Y + 1))
getColor = docRef.channels(1).Histogram(1)

End Function
sxlhl365 2011-05-25
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 simon__sun 的回复:]
会不会是docRef.channels.item(1).Histogram(1)
[/Quote]

这个也没用
simon__sun 2011-05-25
  • 打赏
  • 举报
回复
会不会是docRef.channels.item(1).Histogram(1)
sxlhl365 2011-05-25
  • 打赏
  • 举报
回复
读取docRef.channels.count属性值是可以的
sxlhl365 2011-05-25
  • 打赏
  • 举报
回复
我在VB中调试,对象变量docRef的监视界面如下图
sxlhl365 2011-05-25
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 simon__sun 的回复:]
改成这样试试

VB code

Private Function getColor(X As Integer, Y As Integer) As Long

Set appRef = CreateObject("Photoshop.Application")
Set docRef = appRef.Open("c:\ss.bmp")
docRef.Selection.Select……
[/Quote]

这样也不行
simon__sun 2011-05-25
  • 打赏
  • 举报
回复
改成这样试试

Private Function getColor(X As Integer, Y As Integer) As Long

Set appRef = CreateObject("Photoshop.Application")
Set docRef = appRef.Open("c:\ss.bmp")
docRef.Selection.Select Array(Array(X, Y), Array(X + 1, Y), Array(X + 1, Y + 1), Array(X, Y + 1))
getColor = docRef.channels(1).Histogram(1)

End Function

809

社区成员

发帖
与我相关
我的任务
社区描述
VB 多媒体
社区管理员
  • 多媒体
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧