Files
2026-06-04 11:42:34 +02:00

148 lines
4.0 KiB
C#

using System;
using System.IO;
namespace Hjg.Pngcs.Chunks
{
// Token: 0x0200002B RID: 43
public class PngChunkITXT : PngChunkTextVar
{
// Token: 0x0600017A RID: 378 RVA: 0x0000677D File Offset: 0x0000497D
public PngChunkITXT(ImageInfo info)
: base("iTXt", info)
{
}
// Token: 0x0600017B RID: 379 RVA: 0x000067A4 File Offset: 0x000049A4
public override ChunkRaw CreateRawChunk()
{
if (this.key.Length == 0)
{
throw new PngjException("Text chunk key must be non empty");
}
MemoryStream memoryStream = new MemoryStream();
ChunkHelper.WriteBytesToStream(memoryStream, ChunkHelper.ToBytes(this.key));
memoryStream.WriteByte(0);
memoryStream.WriteByte(this.compressed ? 1 : 0);
memoryStream.WriteByte(0);
ChunkHelper.WriteBytesToStream(memoryStream, ChunkHelper.ToBytes(this.langTag));
memoryStream.WriteByte(0);
ChunkHelper.WriteBytesToStream(memoryStream, ChunkHelper.ToBytesUTF8(this.translatedTag));
memoryStream.WriteByte(0);
byte[] array = ChunkHelper.ToBytesUTF8(this.val);
if (this.compressed)
{
array = ChunkHelper.compressBytes(array, true);
}
ChunkHelper.WriteBytesToStream(memoryStream, array);
byte[] array2 = memoryStream.ToArray();
ChunkRaw chunkRaw = base.createEmptyChunk(array2.Length, false);
chunkRaw.Data = array2;
return chunkRaw;
}
// Token: 0x0600017C RID: 380 RVA: 0x00006870 File Offset: 0x00004A70
public override void ParseFromRaw(ChunkRaw c)
{
int num = 0;
int[] array = new int[3];
for (int i = 0; i < c.Data.Length; i++)
{
if (c.Data[i] == 0)
{
array[num] = i;
num++;
if (num == 1)
{
i += 2;
}
if (num == 3)
{
break;
}
}
}
if (num != 3)
{
throw new PngjException("Bad formed PngChunkITXT chunk");
}
this.key = ChunkHelper.ToString(c.Data, 0, array[0]);
int num2 = array[0] + 1;
this.compressed = c.Data[num2] != 0;
num2++;
if (this.compressed && c.Data[num2] != 0)
{
throw new PngjException("Bad formed PngChunkITXT chunk - bad compression method ");
}
this.langTag = ChunkHelper.ToString(c.Data, num2, array[1] - num2);
this.translatedTag = ChunkHelper.ToStringUTF8(c.Data, array[1] + 1, array[2] - array[1] - 1);
num2 = array[2] + 1;
if (this.compressed)
{
byte[] array2 = ChunkHelper.compressBytes(c.Data, num2, c.Data.Length - num2, false);
this.val = ChunkHelper.ToStringUTF8(array2);
return;
}
this.val = ChunkHelper.ToStringUTF8(c.Data, num2, c.Data.Length - num2);
}
// Token: 0x0600017D RID: 381 RVA: 0x000069A0 File Offset: 0x00004BA0
public override void CloneDataFromRead(PngChunk other)
{
PngChunkITXT pngChunkITXT = (PngChunkITXT)other;
this.key = pngChunkITXT.key;
this.val = pngChunkITXT.val;
this.compressed = pngChunkITXT.compressed;
this.langTag = pngChunkITXT.langTag;
this.translatedTag = pngChunkITXT.translatedTag;
}
// Token: 0x0600017E RID: 382 RVA: 0x000069F0 File Offset: 0x00004BF0
public bool IsCompressed()
{
return this.compressed;
}
// Token: 0x0600017F RID: 383 RVA: 0x000069F8 File Offset: 0x00004BF8
public void SetCompressed(bool compressed)
{
this.compressed = compressed;
}
// Token: 0x06000180 RID: 384 RVA: 0x00006A01 File Offset: 0x00004C01
public string GetLangtag()
{
return this.langTag;
}
// Token: 0x06000181 RID: 385 RVA: 0x00006A09 File Offset: 0x00004C09
public void SetLangtag(string langtag)
{
this.langTag = langtag;
}
// Token: 0x06000182 RID: 386 RVA: 0x00006A12 File Offset: 0x00004C12
public string GetTranslatedTag()
{
return this.translatedTag;
}
// Token: 0x06000183 RID: 387 RVA: 0x00006A1A File Offset: 0x00004C1A
public void SetTranslatedTag(string translatedTag)
{
this.translatedTag = translatedTag;
}
// Token: 0x040000D8 RID: 216
public const string ID = "iTXt";
// Token: 0x040000D9 RID: 217
private bool compressed;
// Token: 0x040000DA RID: 218
private string langTag = "";
// Token: 0x040000DB RID: 219
private string translatedTag = "";
}
}