设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 8087|回复: 23
打印 上一主题 下一主题

[有事请教] 请教一个vb的问题Orz(←模糊标题自重)

[复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
23 小时
注册时间
2011-8-15
帖子
44
跳转到指定楼层
发表于 2011-11-1 16:10:08 手机端发表。 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
5星屑
某字节数组变量储存的是一张图片以二进制读出的数据,有没有办法可以直接将这个字节数组转为stdpicture型啊囧。
存为文件再loadpicture太慢了。

Lv2.观梦者

傻♂逼

梦石
0
星屑
374
在线时间
1606 小时
注册时间
2007-3-13
帖子
6562

烫烫烫开拓者

23
发表于 2011-11-5 00:01:03 | 只看该作者
哎呀,蛋疼什么的最有爱了
回复

使用道具 举报

Lv5.捕梦者 (管理员)

老黄鸡

梦石
0
星屑
41136
在线时间
7570 小时
注册时间
2009-7-6
帖子
13498

开拓者贵宾

22
发表于 2011-11-4 00:51:42 | 只看该作者
yangff 发表于 2011-11-3 19:17
这因该算是效率比较高的截屏了。。
你确定是截屏效率低?还是JPG保存效率低?建议简单封包后直接发送?
还 ...

灰鸽子不会用,网上版本太多,一般都是广域网的。
RGDirect - DirectX驱动的RGSS,点我了解.
RM全系列成套系统定制请联系QQ1213237796
不接受对其他插件维护的委托
回复

使用道具 举报

Lv2.观梦者

傻♂逼

梦石
0
星屑
374
在线时间
1606 小时
注册时间
2007-3-13
帖子
6562

烫烫烫开拓者

21
发表于 2011-11-3 19:17:01 | 只看该作者
这因该算是效率比较高的截屏了。。
你确定是截屏效率低?还是JPG保存效率低?建议简单封包后直接发送?
还有有必要Blt吗?直接Save不行么?Blt效率巨低。。用BLT的话帧率在15左右一般
闪烁什么的可以用双缓冲避免。。但是其实很坑爹的
一个优化是使用Hook,只在重绘时进行录制。
http://www.uvnc.com/index.php
你可以看一下这里面的VNCHooks。。
或者都看看吧。。
如果你要追求高速的话可以看一下
Mirror Driver
其次就是DirectX了这部我不是很熟
在WinDDK的开发包里面有。。不过这种方法很蛋疼。。
如果是Win7的话就用DWMAPI吧
话说远程控制用灰鸽子无误
哎呀,蛋疼什么的最有爱了
回复

使用道具 举报

Lv5.捕梦者 (管理员)

老黄鸡

梦石
0
星屑
41136
在线时间
7570 小时
注册时间
2009-7-6
帖子
13498

开拓者贵宾

20
发表于 2011-11-2 20:12:40 | 只看该作者
本帖最后由 fux2 于 2011-11-2 20:50 编辑
yangff 发表于 2011-11-2 19:40
= =没人告诉你VB6的WinSock会丢包么?


下标改成0,p改成p-1果然好了.
太感谢菲菲姐了,
终于找到卡的原因了。。
是客户端截屏效率太低,求高效截屏方法!(并可高效数据化,要传输)
RGDirect - DirectX驱动的RGSS,点我了解.
RM全系列成套系统定制请联系QQ1213237796
不接受对其他插件维护的委托
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
72
在线时间
673 小时
注册时间
2006-10-3
帖子
1795

开拓者

19
发表于 2011-11-2 18:18:43 | 只看该作者
CopyMemory szfile(Ubound(szfile)), buff(1), (UBound(buff()) + 1 - LBound(buff()))
这样不知道是否可以。。
( ส็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็ ω ส้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้【看猫君玩,我也搞一只】)
回复

使用道具 举报

Lv5.捕梦者 (管理员)

老黄鸡

梦石
0
星屑
41136
在线时间
7570 小时
注册时间
2009-7-6
帖子
13498

开拓者贵宾

18
发表于 2011-11-2 18:08:13 | 只看该作者
熊猫 发表于 2011-11-2 17:54
我记得写文件的时候,是按反着的数组顺序写的
例如正常写{1,2,3,4}
写出来是{4,3,2,1}

对比过了,前面貌似全部正常,但最后文件结尾的一段没合进去,原因实在不明。
RGDirect - DirectX驱动的RGSS,点我了解.
RM全系列成套系统定制请联系QQ1213237796
不接受对其他插件维护的委托
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
72
在线时间
673 小时
注册时间
2006-10-3
帖子
1795

开拓者

17
发表于 2011-11-2 17:54:20 | 只看该作者
fux2 发表于 2011-11-2 17:34
于是直接帖代码吧。
客户端的发送部分是这样的.接收端代码这里的#2输出一张qq.jpg,图像正常
asfd是字节数 ...

我记得写文件的时候,是按反着的数组顺序写的
例如正常写{1,2,3,4}
写出来是{4,3,2,1}
你拆开成俩数组了(拆开多个也是一个道理)
变成了{1,2}{3,4}
写完变成了
{2,1,4,3}
我感觉是因为这个。
你可以把正常的和花花的都保存出来用16进制编辑器对比一下。
( ส็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็ ω ส้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้【看猫君玩,我也搞一只】)
回复

使用道具 举报

Lv5.捕梦者 (管理员)

老黄鸡

梦石
0
星屑
41136
在线时间
7570 小时
注册时间
2009-7-6
帖子
13498

开拓者贵宾

16
发表于 2011-11-2 17:34:27 | 只看该作者
本帖最后由 fux2 于 2011-11-2 17:38 编辑
熊猫 发表于 2011-11-2 17:09
你检查一下CopyMemory后数组是否是正好俩拼在一起。是不是一些数据改变了。
如果数据有变化,就是CopyMem ...


于是直接帖代码吧。
客户端的发送部分是这样的.
  1. Private Sub CaptureScreen()
  2.     Dim ScreenHDC   As Long
  3.     Dim size        As Long
  4.     Dim s           As String
  5.     Dim hIconMouse  As Long
  6.     Dim ICONINFO    As ICONINFO
  7.     Dim Pt          As POINTAPI
  8.     On Error GoTo ErrProc
  9.    
  10.     If SendOK Then
  11.         SendOK = False
  12.         '拷屏
  13.         ScreenHDC = GetDC(0)
  14.         WinAPI.BitBlt mHDC, 0, 0, w, h, ScreenHDC, 0, 0, WinAPI.SRCCOPY
  15.         '压缩
  16.         With jpg
  17.             .Quality = 10
  18.             .SampleHDC mHDC, w, h
  19.             buff() = .SaveData()
  20.         End With
  21.         '发送本幅图像数据长度
  22.         size = UBound(buff()) - LBound(buff())
  23.         s = "|SIZE:|" & CStr(size)
  24.         Winsock1.SendData s
  25.         DoEvents
  26.         Sleep 20
  27.         '发送图像数据
  28.         Winsock1.SendData buff()
  29.         DoEvents
  30.         Erase buff()
  31.         WinAPI.ReleaseDC 0, ScreenHDC
  32.     End If
  33.     Exit Sub
  34. ErrProc:
  35.     Winsock1.Close
  36.     Timer1.Enabled = False
  37.     SendOK = True
  38.     ResetNetConnect
  39.     Exit Sub
  40. End Sub
复制代码
接收端代码
  1. Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
  2.     On Error Resume Next
  3.     Static p As Long
  4.     Static recv As Boolean
  5.     Dim buff() As Byte
  6.     Dim s As String
  7.     Static lenght As Long
  8.         Winsock1.GetData buff()
  9.         If Not recv Then
  10.             s = StrConv(buff(), vbUnicode)
  11.             If InStr(1, s, "size", vbTextCompare) >= 1 And bytesTotal < 20 Then
  12.                 Dim cmd() As String
  13.                 cmd() = Split(s, "|")
  14.                 lenght = CLng(cmd(2))
  15.                 recv = True
  16.                 p = 1
  17.             End If
  18.         Else
  19.             Put #2, p, buff()
  20.             CopyMemory szfile(p), buff(1), (UBound(buff()) + 1 - LBound(buff()))
  21.             p = p + (UBound(buff()) + 1 - LBound(buff()))
  22.             If p >= lenght Then
  23.                 szfile(0) = &HFF
  24.                 Open App.Path & "/asfd.jpg" For Binary As #1
  25.                 Put #1, , szfile()
  26.                 Close #1
  27.                 Close #2
  28.                 recv = False
  29.                 lenght = 0
  30.                 p = 0
  31.                 myPaintPicture
  32.                 Close
  33.                 Unload Form1
  34.                 End
  35.             End If
  36.         End If
  37.         NewClient = True
  38.     Exit Sub
  39. End Sub
复制代码
这里的#2输出一张qq.jpg,图像正常
asfd是字节数组szfile输出的图像,都是花的= =,貌似哪里有错位,但没发现.
RGDirect - DirectX驱动的RGSS,点我了解.
RM全系列成套系统定制请联系QQ1213237796
不接受对其他插件维护的委托
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
72
在线时间
673 小时
注册时间
2006-10-3
帖子
1795

开拓者

15
发表于 2011-11-2 17:09:53 | 只看该作者
fux2 发表于 2011-11-2 17:05
当前用的copymemory,但是生成的图有错位颜色也诡异,下标都改过尝试了。

你检查一下CopyMemory后数组是否是正好俩拼在一起。是不是一些数据改变了。
如果数据有变化,就是CopyMemory的问题。
如果数据正好是俩数组拼起来的,那就是拼的问题,是不是拼的时候要去除或者添加一些东西。
( ส็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็ ω ส้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้【看猫君玩,我也搞一只】)
回复

使用道具 举报

Lv5.捕梦者 (管理员)

老黄鸡

梦石
0
星屑
41136
在线时间
7570 小时
注册时间
2009-7-6
帖子
13498

开拓者贵宾

14
发表于 2011-11-2 17:05:29 | 只看该作者
熊猫 发表于 2011-11-2 17:00
小查了一下,简单对象的数组好像可以使用CopyMemory。21点后回来研究研究……不知道别人有什么好方法~ ...

当前用的copymemory,但是生成的图有错位颜色也诡异,下标都改过尝试了。
RGDirect - DirectX驱动的RGSS,点我了解.
RM全系列成套系统定制请联系QQ1213237796
不接受对其他插件维护的委托
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-9-29 06:12

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表