Esempio n. 1
0
        public async Task SaveAsync(string fileName, ResourceLanguage language, IconGroupSaveFormat saveFormat)
        {
            using (var file = new FileStream(fileName, FileMode.Create, FileAccess.Write, FileShare.None))
            {
                await SaveAsync(file, language, saveFormat).ConfigureAwait(false);

                await file.FlushAsync().ConfigureAwait(false);
            }
        }
Esempio n. 2
0
        public async Task SaveAsync(Stream stream, ResourceLanguage language, IconGroupSaveFormat saveFormat)
        {
            if (saveFormat == IconGroupSaveFormat.Raw)
            {
                var buffer = await _resource.GetBytesAsync(language).ConfigureAwait(false);

                await stream.WriteBytesAsync(buffer).ConfigureAwait(false);
            }
            else
            {
                var group = await _resource.GetGroupAsync(language).ConfigureAwait(false);

                var offsets = new uint[group.Count];
                var offset  = (6 + (16 * offsets.Length)).ToUInt32();

                for (var i = 0; i < group.Count; i++)
                {
                    var entry = group[i];

                    offsets[i] = offset;
                    offset    += entry.BytesInRes;
                }

                await stream.WriteUInt16Async(0).ConfigureAwait(false);

                await stream.WriteUInt16Async(1).ConfigureAwait(false);

                await stream.WriteUInt16Async(group.Count.ToUInt16()).ConfigureAwait(false);

                for (var i = 0; i < group.Count; i++)
                {
                    var entry      = group[i];
                    var colorCount = Convert.ToUInt64(Math.Pow(2, entry.BitCount));

                    if (colorCount >= 256)
                    {
                        colorCount = 0;
                    }

                    await stream.WriteByteAsync(Convert.ToByte(entry.Width >= 256 ? 0 : entry.Width)).ConfigureAwait(false);

                    await stream.WriteByteAsync(Convert.ToByte(entry.Height >= 256 ? 0 : entry.Height)).ConfigureAwait(false);

                    await stream.WriteByteAsync(Convert.ToByte(colorCount)).ConfigureAwait(false);

                    await stream.WriteByteAsync(0).ConfigureAwait(false);

                    await stream.WriteUInt16Async(1).ConfigureAwait(false);

                    await stream.WriteUInt16Async(entry.BitCount).ConfigureAwait(false);

                    await stream.WriteUInt32Async(entry.BytesInRes).ConfigureAwait(false);

                    await stream.WriteUInt32Async(offsets[i]).ConfigureAwait(false);
                }

                var icons = _resource.Type.Resources.First(type => type.Id == ResourceType.Icon);

                for (var i = 0; i < group.Count; i++)
                {
                    var entry    = group[i];
                    var resource = icons.First(r => r.Id == entry.IconId);
                    var buffer   = await resource.GetBytesAsync(language).ConfigureAwait(false);

                    await stream.WriteBytesAsync(buffer).ConfigureAwait(false);
                }
            }
        }
Esempio n. 3
0
 public void Save(string fileName, ResourceLanguage language, IconGroupSaveFormat saveFormat)
 {
     SaveAsync(fileName, language, saveFormat).GetAwaiter().GetResult();
 }
Esempio n. 4
0
 public void Save(Stream stream, ResourceLanguage language, IconGroupSaveFormat saveFormat)
 {
     SaveAsync(stream, language, saveFormat).GetAwaiter().GetResult();
 }