首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VB >

关于“类型不匹配”的异常

2012-12-24 
关于“类型不匹配”的错误我用以下程序获取psd文档中某个像素(x,y)的颜色值,运行到最后一句出现“类型不匹配”

关于“类型不匹配”的错误
我用以下程序获取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


[解决办法]
改成这样试试


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

[解决办法]
引用:
改成这样试试

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……


这样也不行
[解决办法]
我在VB中调试,对象变量docRef的监视界面如下图

[解决办法]
读取docRef.channels.count属性值是可以的
[解决办法]
会不会是docRef.channels.item(1).Histogram(1)

[解决办法]
引用:
会不会是docRef.channels.item(1).Histogram(1)


这个也没用
[解决办法]
如果在工程中引用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
[解决办法]
你是一个sub,却要有返回值?

你把你头一个sub改成function试试看
[解决办法]
channels下级不是Histogram
[解决办法]
引用:
channels下级不是Histogram


从监视界面上看,histogram就是channels下级,没错
[解决办法]
还是没人能解答,自己顶一下
[解决办法]
再来个对象的调试截图,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
[解决办法]
可最后一句是End Sub呀
[解决办法]

引用:
可最后一句是End Sub呀


输入错误,已改了,没用的
[解决办法]
再顶一下,期待高手
[解决办法]
问题已经解决,原来是引用的方式发生变化

热点排行