【问题标题】:C# extract data from png file and append into another png fileC# 从 png 文件中提取数据并附加到另一个 png 文件中
【发布时间】:2021-07-28 18:11:17
【问题描述】:

我正在开发从第一个 png 图像中提取数据并将其附加到另一个 png 图像中的应用程序。

这是来自幻想的游戏。他们在 IEND®B` 之后将字符数据等数据存储到 png 图像中。因此它可以通过在新的 png 文件末尾附加字符数据来更改字符的图像。

我已经在 python 中这样做了

with open (src_image_path, 'rb') as f:
    s = f.read()
    text = b"IEND\xaeB`\x82"
    data_to_write = s.split(text)
    with open (dest_image_path, 'ab') as newImage:
        for i in range(1,len(data_to_write)):
            newImage.write(data_to_write[i])
            newImage.write(text)

注意:第一个索引是第一个图像的png图像数据。我不需要它。因为我只希望第一个索引之后的数据附加到第二个图像中。

在 C# 中

我尝试将所有字节读入字节数组,但找不到 IEND®B` 的索引。它总是返回 -1

byte[] bytes = File.ReadAllBytes(filePath);
byte[] byteToFind = Encoding.UTF8.GetBytes("IEND®B`");
GetFirstOccurance(byteToFind ,bytes);

public static int GetFirstOccurance(byte[] byteToFind, byte[] byteArray)
{
    return Array.IndexOf(byteArray, byteToFind);
}

注意:我可以通过在 notepad++ 中打开 png 文件找到 IEND®B`。它总是在 png 文件的末尾

如何在 C# 中做到这一点

我想在第一个 png 中的 IEND®B` 之后复制数据并附加到第二个 png 中。

【问题讨论】:

  • 你写了一个函数Ge​​tFirstOccurance,它返回一些东西。然后你调用该函数而不使用返回值。这个提示应该会让你走得更远。

标签: c# arrays image


【解决方案1】:

你使用的IndexOf版本大概是这个:

public static int IndexOf (Array array, object? value)

即在引用数组后通过无类型数组搜索。

我希望您想要搜索特定的字节序列,但这不是 IndexOf 所做的。您可能需要编写自己的搜索循环,或者看看这个问题:How to find index of sublist in list

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-01-03
    • 2015-09-27
    • 2011-08-22
    • 1970-01-01
    • 2017-09-13
    • 1970-01-01
    • 2021-05-08
    • 1970-01-01
    相关资源
    最近更新 更多