小编Nox*_*tis的帖子

PNG从Photoshop到Flash的透明度:如何使.swf显示.psd的确切内容?

我在Photoshop中有两个图层:1 - 纹理,2 - 与纹理重叠的半透明图像.这两者的结合在Photoshop中看起来很不错.我将它们与Photoshop分开导出,将它们保存为24位PNG,透明度和颜色转换为sRGB.(PS的工作色彩空间是sRGB.)

将它们导入闪光灯的结果让我哭泣(见下图,注意十字架周围的区域).:(

我尝试动态加载PNG并直接将它们导入fla(压缩类型:lossles,允许平滑:false).看起来半透明区域在导出时被保存.让我感到困惑的是,为什么动态加载和直接导入之间的结果不同.

我错过了什么?对这些症状的深入解释将受到高度赞赏.


EDIT1这是我坚持的psd.在zip中你会找到transparency.psd,它只有两层.我仍然没有运气将它们放入fla:透明区域变脏.

http://noregret.org/test/transparency.zip(400 kb)


EDIT2一位闪存开发人员向我指出了" 预乘alpha问题 ".

http://en.wikipedia.org/wiki/Alpha_compositing#Description

我认为这一定是我要克服的问题.

据我所知,Photoshop内部使用直接alpha(在PNG导出上预乘白色),Flash使用预乘alpha.但我仍然没有得到它:什么产生透明图像渲染的差异?而且我仍然不知道我需要执行哪些操作来使PS和Flash中的内容看起来相同(或者至少我如何指导我们的艺术家准备图像).

任何人?我正在继续挖掘谷歌的答案.


EDIT3不幸的是,我不能平淡的形象.这个例子只是大局的一小部分.我有一个相当复杂的界面,纹理顶部有很多半透明元素.图片看起来很酷(就像是用皱巴巴的纸板或其他东西制成的).所以,我需要单独的纹理和半透明布局.在闪存中向顶层添加混合模式确实可以解决"鬼影区域"问题,但它也会显着改变图像,这是不可接受的.


半透明层:

在此输入图像描述

纹理层:

在此输入图像描述

结果(Windows上的PS和Flash Player的屏幕截图):

  • Photoshop(原创):好的
  • Flash(导入fla):重鬼区
  • 闪光(png加载):轻鬼区

在此输入图像描述

photoshop flash graphics png alpha-transparency

5
推荐指数
1
解决办法
4790
查看次数

ActionScript 3.0-ByteArray中的空字节

我试图了解ByteArray中空字节的重要性。他们扮演终结者的角色吗?我的意思是,一旦写入空字节,就不能进一步写入ByteArray吗?

例如,

import flash.utils.*;

public class print3r{
    public function print3r{
        Util.print(nullout());
    }

    public function nullout:ByteArray (){
        var bytes:ByteArray = new ByteArray();
        bytes.writeInt(((403705888 + 1) - 1)); // Non Printable Characters
        bytes.writeInt(((403705872 - 1) + 1)); // Non Printable Characters
        bytes.writeInt(0x18101000); // Notice the NullByte in this DWORD
        bytes.writeInt(0x41424344); // ASCII Characters ABCD
        return bytes;
    }
}

new print3r;
Run Code Online (Sandbox Code Playgroud)

这给出空白输出。

现在,如果我将DWORD 0x18101000替换为0x18101010,这一次我可以在输出中看到ASCII填充ABCD。

我的问题是,是否可以将空字节写入ByteArray()中?

我问的原因是因为我已经在ActionScript代码中看到,即使在写入空字节之后,也对ByteArray执行了许多writeInt和writeByte操作。

谢谢。

bytearray actionscript-3

2
推荐指数
1
解决办法
1780
查看次数