问2个画图问题

橘子皮... 2012-04-22 12:19:08
1:怎么获得一个hdc的宽和高
2: SetDIBits GetDC(0), image.Picture.Handle, 0, lHeight, ByVal VarPtr(p(1, 1)), bMapinfo, DIB_RGB_COLORS
想把一个2维数组画进image里,为什么不行?怎么能实现?
...全文
101 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
橘子皮... 2012-04-22
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

1:怎么获得一个hdc的宽和高
使用GetWindowRect API,注意,使用的是hWnd不是hdc

2: SetDIBits GetDC(0), image.Picture.Handle, 0, lHeight, ByVal VarPtr(p(1, 1)), bMapinfo, DIB_RGB_COLORS


bMapinfo的参数必须事先设置值
[/Quote]

hdc没宽和高??
bMapinfo我当然提前设置好了,只是没发出来而已,你测试过没?
worldy 2012-04-22
  • 打赏
  • 举报
回复
1:怎么获得一个hdc的宽和高
使用GetWindowRect API,注意,使用的是hWnd不是hdc

2: SetDIBits GetDC(0), image.Picture.Handle, 0, lHeight, ByVal VarPtr(p(1, 1)), bMapinfo, DIB_RGB_COLORS


bMapinfo的参数必须事先设置值
worldy 2012-04-22
  • 打赏
  • 举报
回复
SetDIBits GetDC(0), Image.Picture.Handle, 0, lHeight, ByVal VarPtr(p(1, 1)), bMapinfo, DIB_RGB_COLORS

Image没有Picture属性,应该Image1

即使这样,要能显示出位图,则在设计的时候,需要在Image1中事先加载一个图片,否则Image1.Picture.Handle为0,你也是显示不了图片
橘子皮... 2012-04-22
  • 打赏
  • 举报
回复
那怎么把图画到image上去啊,总不能拿个picturebox中转吧 @.@
贝隆 2012-04-22
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 的回复:]
引用 10 楼 的回复:

Image没有设备场景(hdc),所以你无法绘制


有image.pictrue.handle 这个也不行吗?这个是位图句柄吧,不能绘制吗
那怎么把图弄到image上去?
[/Quote]
句柄和设备场景是两回事
橘子皮... 2012-04-22
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 的回复:]

Image没有设备场景(hdc),所以你无法绘制
[/Quote]

有image.pictrue.handle 这个也不行吗?这个是位图句柄吧,不能绘制吗
那怎么把图弄到image上去?
贝隆 2012-04-22
  • 打赏
  • 举报
回复
Image没有设备场景(hdc),所以你无法绘制
橘子皮... 2012-04-22
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 的回复:]

引用 7 楼 的回复:
.biSizeImage = mWidthBytes * .biHeight * 4


错了,没看到你已经 * 4,这句作废.

你的p(1, 1), 数据是不是从1,1开始的,有数据没有?
再,你把数据写到屏幕(getdc(0)),他是不能保留的(一刷新就没了)。
[/Quote]

是有数据的,都是从1开始的,我省略了没写而已,当然是有数据的啦
怎么改?你帮改下??我的目的是画到image上去
dafu2003 2012-04-22
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]
.biSizeImage = mWidthBytes * .biHeight * 4
[/Quote]

错了,没看到你已经 * 4,这句作废.

你的p(1, 1), 数据是不是从1,1开始的,有数据没有?
再,你把数据写到屏幕(getdc(0)),他是不能保留的(一刷新就没了)。
dafu2003 2012-04-22
  • 打赏
  • 举报
回复
.biSizeImage = mWidthBytes * .biHeight * 4
橘子皮... 2012-04-22
  • 打赏
  • 举报
回复
Public Sub ShowToImage(ByRef Image As Image)
Image.Stretch = True With bMapinfo.bmiHeader
.biSize = Len(bMapinfo.bmiHeader)
.biWidth = lWidth
.biHeight = -lHeight
.biPlanes = 1
.biBitCount = 32
.biCompression = BI_RGB
mWidthBytes = .biWidth * 4
.biSizeImage = mWidthBytes * .biHeight
End With

SetDIBits GetDC(0), Image.Picture.Handle, 0, lHeight, ByVal VarPtr(p(1, 1)), bMapinfo, DIB_RGB_COLORS
Image.Refresh
End Sub


看下怎么改??
橘子皮... 2012-04-22
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

hdc本身是没宽和高的,他的实际大小由赋予他的bitmap确定,而他的bitmap是可以随时改变的。
要获得hdc当前的大小,你把它当前的bitmap取到,然后通过这个bitmap获得其大小。

GetObject API即可获得bitmap的所有信息。
[/Quote]

那第2个问题呢
dafu2003 2012-04-22
  • 打赏
  • 举报
回复
hdc本身是没宽和高的,他的实际大小由赋予他的bitmap确定,而他的bitmap是可以随时改变的。
要获得hdc当前的大小,你把它当前的bitmap取到,然后通过这个bitmap获得其大小。

GetObject API即可获得bitmap的所有信息。

7,763

社区成员

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

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