我的写作工具的自动化我们的一些资产作为一种游戏。什么我想要做的是采取一个文件夹巴布亚新几内亚的文件,将它们合并成一个质地图集,然后出口的atlas系统作为一个TGA和紫外线coords于XML。

我不知道这方法我应该用来加载新文件在C#因为似乎有几个。有什么推荐的方法载图像在C#提供了色彩/alpha数据,所以我可以提取它的TGA?

我也已经有TGA建立码在C++我计划搬到C#但我想知道如果有任何东西已经提供。净建立/保存TGAs?

谢谢你读。

有帮助吗?

解决方案

加载PNG文件到.NET位图是容易的:

Bitmap bmp = (Bitmap)Bitmap.FromFile("c:\wherever\whatever.png");
// yes, the (Bitmap) cast is necessary. Don't ask me why.

一旦位图加载,就可以访问其所有的信息(包括alpha通道信息),使用该位图的LockBits方法(有许多LockBits代码样本在计算器上)最有效。

<强>更新:这里的一个代码示例,示出了如何使用LockBits访问位图的数据逐像素:

System.Drawing.Imaging.BitmapData data =
    bmp.LockBits(new Rectangle(0, 0, bmp.Width, bmp.Height),
    System.Drawing.Imaging.ImageLockMode.ReadOnly, bmp.PixelFormat);
unsafe
{
    // important to use the BitmapData object's Width and Height
    // properties instead of the Bitmap's.
    for (int x = 0; x < data.Width; x++)
    {
        int columnOffset = x * 4;
        for (int y = 0; y < data.Height; y++)
        {
            byte* row = (byte*)data.Scan0 + (y * data.Stride);
            byte B = row[columnOffset];
            byte G = row[columnOffset + 1];
            byte R = row[columnOffset + 2];
            byte alpha = row[columnOffset + 3];
        }
    }
}
bmp.UnlockBits(data);

您需要为您的项目使用此代码“允许不安全的代码”编译器选项。也可以使用位图的与getPixel(X,Y)的方法,但是这是令人惊讶的慢。

其他提示

我没有代码样本,但是我可以给你一个指导原则

  1. 载PNG使用图像。从文()..净支持载PNG
  2. 打开一个文件处理你targa.创建一个如下的..净不支持targa,所以你必须手动把它写。
  3. 锁定位获得的像素。GetPixel()非常缓慢。我认为该方法被命名为LockBits().你会得到一个指表面上阅读素
  4. 写信给targa.Targa是一个容器的格式,因此任何位应该配合。
  5. 拯救紫外线为Xml。

Targa格式

你想使用的调色板?因为你做一个游戏,我会推荐你计算的调色板对你的位图,并将它放到targa,以减少文件的大小。

哦,在我忘记之前,.净不使用RGBA,取而代之的是,像素是BGRA.不要问我为什么但是它就像。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top