zoukankan      html  css  js  c++  java
  • Xna4.0中使用Texture2D.FromStream加载png图像的问题

    最近使用WPF+XNA制作编辑器,因为XNA是嵌入到WPF中的,所以不使用ContentManager加载纹理而直接用Texture2D.FromStream加载。但是用Texture2D.FromStream加载半透明的png图像时,发现纹理与原图不一致,特别是半透明的信息基本都丢失了,图像变得一团糟。

    具体效果如图:

     

    从左到右依次为:使用ContentManager加载、使用 Texture2D.FromStream加载和使用 Texture2D.FromStream加载后进行处理的结果。

    可见对于半透明的png图像,如果使用Texture2D.FromStream加载后直接渲染,效果十分差,必须进行处理。我们可以使用下面这个静态方法进行处理:

     1 private static void PreMultiplyAlphas(Texture2D ret)
     2 {
     3     Byte4[] data = new Byte4[ret.Width * ret.Height];
     4     ret.GetData<Byte4>(data);
     5     for (int i = 0; i < data.Length; i++)
     6     {
     7         Vector4 vec = data[i].ToVector4();
     8         float alpha = vec.W / 255.0f;
     9         int a = (int)(vec.W);
    10         int r = (int)(alpha * vec.X);
    11         int g = (int)(alpha * vec.Y);
    12         int b = (int)(alpha * vec.Z);
    13         uint packed = (uint)(
    14             (a << 24) +
    15             (b << 16) +
    16             (g << 8) +
    17             r
    18             );
    19 
    20         data[i].PackedValue = packed;
    21     }
    22     ret.SetData<Byte4>(data);
    23 }

     从方法是从MSDN论坛上找到的。

  • 相关阅读:
    适配iOS 10以及Xcode 8(转载)
    React-nwb的使用
    Android与JS混编(多图选择器)
    Android与JS混编(js调用android相机扫描二维码)
    Android与JS混编(js调用android相机)
    iOS: FFmpeg的使用
    UITableView/UICollectionView使用技巧
    IOS MapKit框架的使用(专门用于地图显示)
    iOS 地理编码 / 反地理编码
    iOS地图 -- 定位使用
  • 原文地址:https://www.cnblogs.com/huobilie/p/2281201.html
Copyright © 2011-2022 走看看