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

Project1

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

[已经解决] 请教关于显示图片的问题

[复制链接]

Lv1.梦旅人

梦石
0
星屑
167
在线时间
434 小时
注册时间
2009-1-1
帖子
643
跳转到指定楼层
1
发表于 2010-12-27 03:32:04 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
本帖最后由 赛露休斯 于 2010-12-27 03:42 编辑

我想在RMXP中显示网络上的图片,比如显示我在66rpg上的头像,图片不保存到电脑,该怎么做?
听上去比较困难,不知道有没有可能做到

点评

你的注册时间好神....1月一日  发表于 2010-12-27 22:53
不保存到电脑是不可能的,任何网络资源想显示必须先保存到本地的,一般是临时文件夹  发表于 2010-12-27 08:01
应该能做到,不过可能非常占资源,就像进过66格斗纹章里面的小黑屋一样会很卡……  发表于 2010-12-27 07:29
最近在研究XAS

Lv1.梦旅人

梦石
0
星屑
110
在线时间
953 小时
注册时间
2007-4-25
帖子
805
6
发表于 2010-12-29 13:01:03 | 只看该作者
给个方向吧,实际应用时还需要处理很多东西:
  1. wsa_startup = Win32API.new('ws2_32', 'WSAStartup', 'ip', 'i')
  2. wsa_cleanup = Win32API.new('ws2_32', 'WSACleanup', 'v', 'i')
  3. get_addr_info = Win32API.new('ws2_32', 'getaddrinfo', 'pppp', 'i')
  4. free_addr_info = Win32API.new('ws2_32', 'freeaddrinfo', 'l', 'v')
  5. socket = Win32API.new('ws2_32', 'socket', 'iii', 'l')
  6. closesocket = Win32API.new('ws2_32', 'closesocket', 'l', 'i')
  7. connect = Win32API.new('ws2_32', 'connect', 'lli', 'i')
  8. send = Win32API.new('ws2_32', 'send', 'lpii', 'i')
  9. recv = Win32API.new('ws2_32', 'recv', 'lpii', 'i')
  10. move_memory = Win32API.new('kernel32', 'RtlMoveMemory', 'pll', 'v')

  11. BUF_LEN = 16
  12. buf = "\000" * BUF_LEN
  13. praw_addr_info = "\000\000\000\000"
  14. raw_addr_info = "\000" * 32
  15. http_response = ''
  16. http_request = <<EOR
  17. GET http://rpg.blue/uc_server/data/avatar/000/05/63/75_avatar_middle.jpg HTTP/1.1
  18. Host: rpg.blue
  19. Connection: close

  20. EOR

  21. wsa_startup.call(0x0202, "\000" * 400)
  22. get_addr_info.call('rpg.blue', 'http', 0, praw_addr_info)
  23. raw_addr_info_addr = praw_addr_info.unpack('l')[0]
  24. move_memory.call(raw_addr_info, raw_addr_info_addr, 32)
  25. addr_info = raw_addr_info.unpack('iiiillll')

  26. sock = socket.call(addr_info[1], addr_info[2], addr_info[3])
  27. connect.call(sock, addr_info[6], addr_info[4])

  28. send.call(sock, http_request, http_request.length, 0)
  29. loop do
  30.   byte_count = recv.call(sock, buf, BUF_LEN, 0)
  31.   break if byte_count <= 0
  32.   http_response += buf[0, byte_count]
  33. end

  34. free_addr_info.call(raw_addr_info_addr)
  35. closesocket.call(sock)
  36. wsa_cleanup.call

  37. response_headers = http_response.split(/\r\n/)
  38. image_data = response_headers[-1]

  39. open('1.jpg', 'wb') do |jpeg|
  40.         jpeg << image_data
  41. end
复制代码
打开一个 Socket,发送 HTTP 请求,接收 HTTP 响应中的图像数据。实际应用时,需要处理 Winsock 函数可能导致的各种错误;BUF_LEN 是每次接收数据的缓冲区大小,可以调整到 1024 左右;http_request 是实际的 HTTP 请求行、报头以及可能的正文,这里给了一个很简单的 GET,根据需要可以添加其它报头。

最后的 image_data 接收到了完整的图像数据,这段代码通过 Kernel#open 函数保存到了当前目录的 1.jpg。你可以选择把游戏目录下的某个目录作为临时目录保存这个图像,或者通过 Windows API 的 GetTempPath 和 GetTempFileName 保存到系统临时目录,然后用 RGSS 的 Bitmap.new 去创建位图并显示,或者在内存中直接处理图像数据——由于数据是 jpg 格式,你还需要解码、解压为 RMXP 使用的 32 位位图格式,然后给拷贝到一个已有的 Bitmap 对象的位图数据缓冲区中(参见柳之一的 Bitmap Marshal)。

点评

可能是 notepad++ 的问题,我直接复制过来,换行的地方少 \r(不可见)  发表于 2010-12-29 22:40
能够正常接收数据应该没太大问题了,谢谢了  发表于 2010-12-29 21:32
喵,第一句出现错误,重新手打却没问题,这咋回事?  发表于 2010-12-29 14:02
很好很强大  发表于 2010-12-29 13:08

评分

参与人数 1星屑 +532 收起 理由
fux2 + 532 认可答案

查看全部评分

[email protected]:~> repeat 1 fortune
Matz is nice, so we are nice.
回复 支持 反对

使用道具 举报

Lv2.观梦者

铃铃塔的守护者

梦石
0
星屑
626
在线时间
961 小时
注册时间
2010-10-24
帖子
2768

贵宾

5
发表于 2010-12-27 22:53:06 | 只看该作者
建议还是保存下来吧,估计上网找图片然后显示交给RM自己来说不是什么太难的事,但是引用楼上的话 :经常脚本错误。建议放弃。

魔法麻将独立游戏制作中,欢迎热情的测试员与UI设计师合作开发~
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
3852
在线时间
1582 小时
注册时间
2006-5-5
帖子
2743
4
发表于 2010-12-27 22:48:17 | 只看该作者
这个基本不现实吧!
在脚本里设置的话要吧每个图片的地址都写上,以前我朋友曾经尝试过,但效果差,经常脚本错误。
步兵中尉
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
167
在线时间
434 小时
注册时间
2009-1-1
帖子
643
3
 楼主| 发表于 2010-12-27 21:37:18 | 只看该作者
本帖最后由 赛露休斯 于 2010-12-27 21:37 编辑

那么如果必须要保存到系统临时文件夹的话,再显示出来,具体该怎么实现?
最近在研究XAS
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
131 小时
注册时间
2010-6-24
帖子
623
2
发表于 2010-12-27 11:40:18 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-16 02:40

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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