注册 登录
编程论坛 VB6论坛

请教下SetPixel 函数中的htc(设备场景的句柄)怎么找?

atan2013 发布于 2014-01-14 20:46, 662 次点击
VB声明
Declare Function SetPixel Lib "gdi32" Alias "SetPixel" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal crColor As Long) As Long
这里的hdc,请教下,我VB基础差。
当打开一张图片Open "C:\1.bmp" For Binary As #1后,接下来要修改图片中某个点的颜色,应该用到这个SetPixel命令了,请教下这时的hdc怎么写?
5 回复
#2
lowxiong2014-01-14 22:20
hdc是图形设备句柄,一般图形控件或窗体有这个句柄,可被图形函数使用。open函数会获得一个文件设备句柄,这个句柄只能被文件类函数使用,不能被图像类函数使用。
#3
Artless2014-01-14 22:48
要修改图片中某个点的颜色,Open后,接下来直接修改数据。
SetPixel用来设置图形控件某个点的颜色。
#4
atan20132014-01-15 19:19
回复 3楼 Artless
能给个open后怎么改颜色的源码吗?查了好久查不到。(包括修改后怎么保存的源码)

[ 本帖最后由 atan2013 于 2014-1-15 19:20 编辑 ]
#5
lowxiong2014-01-16 16:10
不用open的行不,用文件的方式必须知道bmp文件结构,还需要知道哈弗曼压缩编码的压缩还原算法,相当麻烦的。用图片控件很容易修改存储bmp格式图片。
#6
atan20132014-01-16 16:23
回复 5楼 lowxiong
Private Function FindByte(ByVal LineWidth As Long, ByVal LineCount As Long, ByVal x As Long, ByVal y As Long) As Long
    FindByte = 55 + (LineCount - y - 1) * LineWidth + 3 * x
End Function
Public Function getclo(picpic As String, x As Integer, y As Integer) '图像路劲,横坐标,纵坐标
    Dim BMPWidth As Long
    Dim BMPHeight As Long
    Dim LineWidth As Long
    Dim ArrByte(0 To 3) As Byte
    Dim R As Integer
    Dim G As Integer
    Dim B As Integer
    Open picpic For Binary As #1
    Get #1, 19, ArrByte
    BMPWidth = ArrByte(3) * 256 ^ 3 + ArrByte(2) * 256 ^ 2 + ArrByte(1) * 256 + ArrByte(0) '图像宽
    Get #1, 23, ArrByte
    BMPHeight = ArrByte(3) * 256 ^ 3 + ArrByte(2) * 256 ^ 2 + ArrByte(1) * 256 + ArrByte(0) '图像高
    Select Case (BMPWidth * 3) Mod 4 'BMP图要求每行字节数为4的倍数,不够则填充1-3个无用字节
    Case 0
        LineWidth = BMPWidth * 3
    Case 1
        LineWidth = BMPWidth * 3 + 3
    Case 2
        LineWidth = BMPWidth * 3 + 2
    Case 3
        LineWidth = BMPWidth * 3 + 1
    End Select
    Get #1, FindByte(LineWidth, BMPHeight, x, y), ArrByte '此为求 (x,y)点颜色分量
    R = ArrByte(2)
    G = ArrByte(1)
    B = ArrByte(0)
    Close #1
    getclo = Hex(RGB(R, G, B))
End Function
这是网上整理来的读取硬盘图片某个点颜色的源码,因为想要做成插件调用,所以不能调用图形控件,求改色和保存修改内容的源码。
1