问题描述
我正在开发从第一个 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);
}
注意:我可以通过在记事本++中打开 png 文件找到 IEND®B`。它总是在 png 文件的末尾
我如何在 C# 中做到这一点
我想复制第一个 png 中 IEND®B` 之后的数据并附加到第二个 png 中。
解决方法
您使用的 IndexOf 版本可能是这个:
public static int IndexOf (Array array,object? value)
即在对数组的引用后通过无类型数组进行搜索。
我希望您想搜索特定的字节序列,但这不是 IndexOf 所做的。您可能需要编写自己的搜索循环,或者看看这个问题:How to find index of sublist in list。