148 lines
4.0 KiB
C#
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 = "";
|
|
}
|
|
}
|