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

66 lines
2.0 KiB
C#

using System;
using System.IO;
namespace System.Resources
{
// Token: 0x0200028C RID: 652
internal class Win32IconFileReader
{
// Token: 0x060020D9 RID: 8409 RVA: 0x00078984 File Offset: 0x00076B84
public Win32IconFileReader(Stream s)
{
this.iconFile = s;
}
// Token: 0x060020DA RID: 8410 RVA: 0x00078994 File Offset: 0x00076B94
public ICONDIRENTRY[] ReadIcons()
{
ICONDIRENTRY[] array2;
using (BinaryReader binaryReader = new BinaryReader(this.iconFile))
{
int num = (int)binaryReader.ReadInt16();
int num2 = (int)binaryReader.ReadInt16();
if (num != 0 || num2 != 1)
{
throw new Exception("Invalid .ico file format");
}
long num3 = (long)binaryReader.ReadInt16();
ICONDIRENTRY[] array = new ICONDIRENTRY[num3];
int num4 = 0;
while ((long)num4 < num3)
{
ICONDIRENTRY icondirentry = new ICONDIRENTRY();
icondirentry.bWidth = binaryReader.ReadByte();
icondirentry.bHeight = binaryReader.ReadByte();
icondirentry.bColorCount = binaryReader.ReadByte();
icondirentry.bReserved = binaryReader.ReadByte();
icondirentry.wPlanes = binaryReader.ReadInt16();
icondirentry.wBitCount = binaryReader.ReadInt16();
int num5 = binaryReader.ReadInt32();
int num6 = binaryReader.ReadInt32();
icondirentry.image = new byte[num5];
long position = this.iconFile.Position;
this.iconFile.Position = (long)num6;
this.iconFile.Read(icondirentry.image, 0, num5);
this.iconFile.Position = position;
if (icondirentry.wPlanes == 0)
{
icondirentry.wPlanes = (short)((int)icondirentry.image[12] | ((int)icondirentry.image[13] << 8));
}
if (icondirentry.wBitCount == 0)
{
icondirentry.wBitCount = (short)((int)icondirentry.image[14] | ((int)icondirentry.image[15] << 8));
}
array[num4] = icondirentry;
num4++;
}
array2 = array;
}
return array2;
}
// Token: 0x04000BC0 RID: 3008
private Stream iconFile;
}
}