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

Project1

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

[通用发布] 上下翻转Bitmap(快速)

[复制链接]

Lv1.梦旅人

梦石
0
星屑
60
在线时间
156 小时
注册时间
2011-12-13
帖子
133
跳转到指定楼层
1
发表于 2012-3-4 12:18:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 dant 于 2012-3-4 12:19 编辑

使用内存操作
为某个大坑服务
RUBY 代码复制
  1. class Bitmap
  2.   #--------------------------------------------------------------------------
  3.   # ● 传送到内存的API函数
  4.   #--------------------------------------------------------------------------
  5.   RtlMoveMemory_pi = Win32API.new('kernel32', 'RtlMoveMemory', 'pii', 'i')
  6.   Memcpy_ii = Win32API.new('kernel32.dll','RtlMoveMemory','iii','v')
  7.   Malloc = Win32API.new('msvcrt.dll','malloc','i','i')
  8.   Free = Win32API.new('msvcrt.dll','free','i','v')
  9.  
  10.   #--------------------------------------------------------------------------
  11.   # ● Bitmap地址
  12.   #--------------------------------------------------------------------------
  13.   # [[[bitmap.object_id * 2 + 16] + 8] + 16] == 数据的开头
  14.   def address
  15.     buffer, ad = "rgba", object_id * 2 + 16
  16.     RtlMoveMemory_pi.call(buffer, ad, 4)
  17.     ad = buffer.unpack("L")[0] + 8
  18.     RtlMoveMemory_pi.call(buffer, ad, 4)
  19.     ad = buffer.unpack("L")[0] + 16
  20.     RtlMoveMemory_pi.call(buffer, ad, 4)
  21.     return buffer.unpack("L")[0]
  22.   end
  23.   #--------------------------------------------------------------------------
  24.   # ● 上下翻转
  25.   #--------------------------------------------------------------------------
  26.   def reverse!
  27.     len = width * height * 4
  28.     pBuf = Malloc.call(len)
  29.     lenln = width * 4
  30.     src = address + len - lenln
  31.     dst = pBuf
  32.  
  33.     for i in 0...height
  34.       Memcpy_ii.call(dst,src,lenln)
  35.       src-=lenln
  36.       dst+=lenln
  37.     end
  38.     Memcpy_ii.call(address,pBuf,len)
  39.     Free.call(pBuf)
  40.   end
  41.  
  42.   def reverse
  43.     newBmp=self.clone
  44.     newBmp.reverse!
  45.     return newBmp
  46.   end
  47. end

Lv2.观梦者

梦石
0
星屑
633
在线时间
368 小时
注册时间
2009-3-9
帖子
398
2
发表于 2013-12-28 17:58:38 | 只看该作者
大神,发个全套的吧:上下翻转、左右翻转....
新手学习中.....努力吧!!
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
9275
在线时间
2504 小时
注册时间
2011-5-20
帖子
15389

开拓者

3
发表于 2013-12-28 18:16:59 | 只看该作者
翻bitmap和图片有区别吗···
[img]http://service.t.sina.com.cn/widget/qmd/5339802982/c02e16bd/7.png
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-4-20 07:45

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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