VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 1540|回复: 27

[求助] 传奇翅膀贴图问题

[复制链接]
55_avatar_middle
在线会员 发表于 2015-12-13 23:36:28 | 显示全部楼层 |阅读模式
3驿站币
看先来看图片吧

。。。不支持BMP格式。。

传奇资源图片都是BMP 256色格式的。

人物图片好处理,直接黑色透明就好了。

但是一些特效图片色就没那么纯了,

比如说 刺杀 ?  又或者人物身上的翅膀。

就拿火龙战甲的翅膀来说吧。最外层是黑色,在里面点不是纯黑色,

然后才是翅膀的颜色,那么这个图片传奇是怎么去除背景的呢?

附件中是传奇里提取出来的翅膀图片,

在线等大牛。
传奇翅膀贴图问题 001200.rar (5.23 KB, 下载次数: 5)

最佳答案

查看完整内容

前景透明度 = 前景色 / 0XFFFFFF 最终颜色 = 背景色*(1-前景透明度)+前景色*前景透明度 原理就这样了 前面的PHP写错了 不用分别计算RGB的透明度 再来两张图




上一篇:这个函数哪里有错 ?需要哪里修改
下一篇:请问如何如何制作一个软件的工具包?
70_avatar_middle
在线会员 发表于 2015-12-13 23:36:29 | 显示全部楼层
anzun 发表于 2015-12-15 10:53
PHP不是很明白,但是看上面的图片,好像有点明白了。就像PS里一样,先加了一个红色通道在透明?

前景透明度 = 前景色 / 0XFFFFFF
最终颜色 = 背景色*(1-前景透明度)+前景色*前景透明度

原理就这样了 前面的PHP写错了
不用分别计算RGB的透明度
再来两张图

colorful

colorful

syc

syc
51_avatar_middle
online_admins 发表于 2015-12-13 23:45:48 | 显示全部楼层
我感觉他的这个图片的背景透明不会让程序人员去处理,直接让美术做成背景透明的就可以了,之后程序直接拿过来用就行,不然得费些功夫
55_avatar_middle
ico_lz  楼主| 发表于 2015-12-13 23:58:31 | 显示全部楼层
Syc 发表于 2015-12-13 23:45
我感觉他的这个图片的背景透明不会让程序人员去处理,直接让美术做成背景透明的就可以了,之后程序直接拿过 ...

......问题是传奇里面的就都是这样,但是我进传奇又没见那些瑕疵了。

所以我不明白。。
51_avatar_middle
online_admins 发表于 2015-12-14 00:10:20 | 显示全部楼层
anzun 发表于 2015-12-13 23:58
......问题是传奇里面的就都是这样,但是我进传奇又没见那些瑕疵了。

所以我不明白。。

你导出的资源不一定是传奇内部的原图,我是这么猜测的
55_avatar_middle
ico_lz  楼主| 发表于 2015-12-14 00:43:10 | 显示全部楼层
Syc 发表于 2015-12-14 00:10
你导出的资源不一定是传奇内部的原图,我是这么猜测的

我是用传奇资源工具打开的。

网上做传奇装备补丁的都用这个工具导进去的。

我能肯定是保证是原图。
71_avatar_middle
online_supermod 发表于 2015-12-14 09:22:14 | 显示全部楼层
要做镂空,就是位图透明,网上有很多这样的例子

http://www.cnblogs.com/zhixing/archive/2011/11/14/2249058.html
55_avatar_middle
ico_lz  楼主| 发表于 2015-12-14 10:30:24 | 显示全部楼层
xidaduo 发表于 2015-12-14 09:22
要做镂空,就是位图透明,网上有很多这样的例子

http://www.cnblogs.com/zhixing/archive/2011/11/14/22 ...

感谢兄台回复,但是你那个网站里介绍的是透明,都是纯色的。

你看下附件中,那个图片翅膀边缘并不是纯黑色。
70_avatar_middle
在线会员 发表于 2015-12-14 12:03:25 | 显示全部楼层
anzun 发表于 2015-12-14 10:30
感谢兄台回复,但是你那个网站里介绍的是透明,都是纯色的。

你看下附件中,那个图片翅膀边缘并不是纯 ...

b

b

g

g

r

r

没什么好办法
70_avatar_middle
在线会员 发表于 2015-12-14 12:06:35 | 显示全部楼层
好久没写过C了 不会写 PHP写的 凑活看吧
<?php
header("Content-Type:image/png");
$wing = imagecreatefrompng("1.png");
$image = imagecreatetruecolor(imagesx($wing), imagesy($wing));
for($x=0; $x<imagesx($wing); $x++) {
        for($y=0; $y<imagesy($wing); $y++) {
                $rgb = imagecolorat($wing, $x, $y);
                $r =($rgb >> 16) & 0xFF;
                $g = ($rgb >> 8) & 0xFF;
                $b = $rgb & 0xFF;

                $bgr = 0;
                $bgg = 255;
                $bgb = 0;

                $r = round($bgr*(1-$r/255)+$r*($r/255));
                $g = round($bgg*(1-$g/255)+$g*($g/255));
                $b = round($bgb*(1-$b/255)+$b*($b/255));
                $color = imagecolorallocate($image, $r, $g, $b);
                imagesetpixel($image, $x, $y, $color);
        }
}
imagepng($image);
?>

评分

参与人数 1威望 +2 驿站币 +3 热心值 +3 收起 理由
51_avatar_small Syc + 2 + 3 + 3 赞一个!

查看全部评分

55_avatar_middle
ico_lz  楼主| 发表于 2015-12-14 12:14:09 | 显示全部楼层
hahala 发表于 2015-12-14 12:06
好久没写过C了 不会写 PHP写的 凑活看吧

兄台似乎处理了每个像素点?

不过通过你这段代码确实给予我了一个思路,

就是就直接取像素点,然后判断RGB?

不知道这样可以不。
70_avatar_middle
在线会员 发表于 2015-12-14 19:43:51 | 显示全部楼层
anzun 发表于 2015-12-14 12:14
兄台似乎处理了每个像素点?

不过通过你这段代码确实给予我了一个思路,

看样子你是没看懂
55_avatar_middle
ico_lz  楼主| 发表于 2015-12-15 10:53:44 | 显示全部楼层
hahala 发表于 2015-12-14 19:43
看样子你是没看懂

PHP不是很明白,但是看上面的图片,好像有点明白了。就像PS里一样,先加了一个红色通道在透明?
70_avatar_middle
在线会员 发表于 2015-12-15 15:36:31 | 显示全部楼层
AlphaBlend也许是这个
71_avatar_middle
online_supermod 发表于 2015-12-16 09:25:28 | 显示全部楼层
Alpha 透明度混合算法,网上收集整理,分成以下三种:

一、 R1,G1,B1,Alpha1 为前景颜色值,R2,G2,B2,Alpha2 为背景颜色值,则

        前景色  R = R1 * Alpha1 + R2 * Alpha2 * (1-Alpha1) ;

                   G = G1 * Alpha1 + G2 * Alpha2 * (1-Alpha1) ;

                   B = B1 * Alpha1 + B2 * Alpha2 * (1-Alpha1) ;

        背景色 Alpha = 1 - (1 - Alpha1) * ( 1 - Alpha2) ;

                   R = R / Alpha ;

                   G = G / Alpha ;

                   B = B / Alpha ;

二、半透明算法:
      混合算法目前在常用到的算法是AlphaBlend。
      计算公式如下:假设一幅图象是A,另一幅透明的图象是B,那么透过B去看A,看上去的图象C就是B和A的混合图象,
      设B图象的透明度为alpha(取值为0-1,1为完全透明,0为完全不透明).
      Alpha混合公式如下:
                  R(C)=(1-alpha)*R(B) + alpha*R(A)
                  G(C)=(1-alpha)*G(B) + alpha*G(A)
                  B(C)=(1-alpha)*B(B) + alpha*B(A)
      R(x)、G(x)、B(x)分别指颜色x的RGB分量原色值。从上面的公式可以知道,Alpha其实是一个决定混合透明度的数值。
      改变这个 alpha 值可以得到一个渐变的效果。

      分离RGB色用"位与"、"移位"运算的方法;

      透明的比例按2的N次幂来分级,这样可以快速运算。
      如果是按32级
      Alpha = 1/32
      B图的权重 = (32-n)/32,则A图的权重= n/32,

      可以得到这样的算法:

      R(C)= (32-n) * R(B)+ n* R(A);
     再对R(C)右移5位(除以32)就可以了

    透明的处理:
       假设指定B上的黑色透明色,则碰到B上的颜色为黑色,则不显示黑色,改为显示A上这个位置的颜色。



三、简易Alpha混合算法:首先,要能取得上层与下层颜色的 RGB三基色,

      然后用r,g,b 为最后取得的颜色值;r1,g1,b1是上层的颜色值;r2,g2,b2是下层颜色值

      若Alpha=透明度,则

      当Alpha=50%时,

                    r = r1/2 + r2/2;

                    g = g1/2 + g2/2;

                    b = b1/2 + b2/2;

      当Alpha<50%时,

                    r = r1 - r1/ALPHA + r2/ALPHA;

                    g = g1 - g1/ALPHA + g2/ALPHA;

                    b = b1 - b1/ALPHA + b2/ALPHA;

      当Alpha>50%时,

                    r = r1/ALPHA + r2 - r2/ALPHA;

                    g = g1/ALPHA + g2 - g2/ALPHA;

                    b = b1/ALPHA + b2 - b2/ALPHA;

55_avatar_middle
ico_lz  楼主| 发表于 2015-12-16 10:49:19 | 显示全部楼层
hahala 发表于 2015-12-15 15:33
前景透明度 = 前景色 / 0XFFFFFF
最终颜色 = 背景色*(1-前景透明度)+前景色*前景透明度

我要的就是这个效果,但是还是不明白编程怎么弄。。。
55_avatar_middle
ico_lz  楼主| 发表于 2015-12-16 10:50:55 | 显示全部楼层
xidaduo 发表于 2015-12-16 09:25
Alpha 透明度混合算法,网上收集整理,分成以下三种:

一、 R1,G1,B1,Alpha1 为前景颜色值,R2,G2,B2, ...

没图片,也不知道做出来是什么效果。。
55_avatar_middle
ico_lz  楼主| 发表于 2015-12-16 18:40:42 | 显示全部楼层
hahala 发表于 2015-12-13 23:36
前景透明度 = 前景色 / 0XFFFFFF
最终颜色 = 背景色*(1-前景透明度)+前景色*前景透明度

仔细研究了下算法。。

终于明白了。
55_avatar_middle
ico_lz  楼主| 发表于 2015-12-17 11:25:28 | 显示全部楼层
hahala 发表于 2015-12-13 23:36
前景透明度 = 前景色 / 0XFFFFFF
最终颜色 = 背景色*(1-前景透明度)+前景色*前景透明度


昨天理解了,

今天操作的时候不对啊。

求大神解救下。 传奇翅膀贴图问题

运行后

传奇翅膀贴图问题
70_avatar_middle
在线会员 发表于 2015-12-17 14:08:57 | 显示全部楼层
anzun 发表于 2015-12-17 11:25
昨天理解了,

今天操作的时候不对啊。

算法是对的
中间两句删了 直接GetPixel SetPixel看能输出原图不
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号tongdun|网站地图wx_jqr

GMT+8, 2019-8-21 05:42

Powered by Discuz! X3.4

© 2009-2019 cctry.com

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