public async Task AddGtfs(string dirName, IProgress <ProgressData> progress = null) { DirectoryInfo dInfo = new DirectoryInfo(dirName); HashSet <string> filenames = new HashSet <string>(dInfo.GetFiles("*.png") .Select(fInfo => fInfo.Name)); string filenameXlsxName = dirName + "/filenames.xlsx"; XlsxReader xlsx = new XlsxReader(filenameXlsxName); IEnumerable <Record> records = (await Task.Run(() => xlsx.GetRows("XXI", "filenames"))) .Where(record => filenames.Contains((string)record[1])); int total = records.Count(); int count = 0; foreach (Record record in records) { string entryName = (string)record[0]; string pngName = dInfo.FullName + '\\' + (string)record[1]; count++; progress?.Report(new ProgressData { count = count, total = total, filename = entryName }); if (!HasFile(entryName)) { ZipArchiveEntry entry = zipArchive.CreateEntry(entryName); using Stream entryStream = entry.Open(); await GTF.WriteGTF(entryStream, new System.Drawing.Bitmap(pngName), (int)record[2]); _entries.Add(new PatchZipEntry(entry)); } } }
public async Task ReplaceGTF(int index, Bitmap bitmap) { if (index < 0 || index > Count) { throw new ArgumentOutOfRangeException(); } int encodingType = gtfs[index].Type; gtfs[index].Dispose(); using MemoryStream ms = new MemoryStream(); await GTF.WriteGTF(ms, bitmap, encodingType); ms.Seek(0, SeekOrigin.Begin); gtfs[index] = GTF.CreateFromGtfStream(ms); ms.Seek(0, SeekOrigin.Begin); await gtfSource.Entries[index].SetData(ms); }
public async Task WriteGtfTest(string fileName, string outGtf, int type) { using Bitmap bitmap = new Bitmap(fileName); using FileStream outStream = new FileStream(outGtf, FileMode.Create, FileAccess.Write); await GTF.WriteGTF(outStream, bitmap, type); }