internal void GeneratePostImageResizes(PostRepository postRepository) { var dzi = new DeepZoomImage(_settings); var workingPath = _settings.AbsoluteWorkingFolder; var imageFormat = _settings.PostImageEncoding; var extension = imageFormat.GetName(); var fileNameIdFormat = _settings.FileNameIdFormat; foreach (var postId in postRepository.RetrievePostIds()) { var relativeBinnedImagePath = Post.ComputeBinnedPath(postId, extension, fileNameIdFormat); var absoluteBinnedImagePath = Path.Combine(workingPath, relativeBinnedImagePath); var relativeBinnedImageFolder = Post.ComputeBinnedPath(postId, null, fileNameIdFormat) + "_files"; var absoluteBinnedImageFolder = Path.Combine(workingPath, relativeBinnedImageFolder); Directory.CreateDirectory(absoluteBinnedImageFolder); using (var inputStream = absoluteBinnedImagePath.CreateReadStream()) using (var sourceBitmap = new Bitmap(inputStream)) { dzi.GeneratePostImageResizes(sourceBitmap, (level, resizedBitmap) => { var levelImageName = "{0}.{1}".FormatInvariant(level, extension); var levelImagePath = Path.Combine(absoluteBinnedImageFolder, levelImageName); using (var outputStream = levelImagePath.CreateReadStream()) { resizedBitmap.Save(outputStream, imageFormat); } } ); } } }
internal static void GeneratePostImageResizes(Settings settings, PostRepository postRepository) { var size = settings.ItemImageSize; var maximumLevel = DeepZoomImage.DetermineMaximumLevel(size); var workingPath = Path.GetFullPath(WorkingFolderName); var imageFormat = settings.PostImageEncoding; var extension = imageFormat.ToString().ToLower(); var fileNameIdFormat = settings.FileNameIdFormat; foreach (var postId in postRepository.RetrievePostIds()) { var relativeBinnedImagePath = Post.ComputeBinnedPath(postId, extension, fileNameIdFormat); var absoluteBinnedImagePath = Path.Combine(workingPath, relativeBinnedImagePath); var relativeBinnedImageFolder = Post.ComputeBinnedPath(postId, null, fileNameIdFormat) + "_files"; var absoluteBinnedImageFolder = Path.Combine(workingPath, relativeBinnedImageFolder); Directory.CreateDirectory(absoluteBinnedImageFolder); using (var inputStream = new FileStream(absoluteBinnedImagePath, FileMode.Open, FileAccess.Read, FileShare.Read)) using (var sourceBitmap = new Bitmap(inputStream)) { GeneratePostImageResizes(sourceBitmap, size, maximumLevel, (level, resizedBitmap) => { var levelImageName = "{0}.{1}".FormatInvariant(level, extension); var levelImagePath = Path.Combine(absoluteBinnedImageFolder, levelImageName); using (var outputStream = new FileStream(levelImagePath, FileMode.Create, FileAccess.Write, FileShare.Read)) { resizedBitmap.Save(outputStream, imageFormat); } } ); } } }
internal void GenerateImageSlices(PostRepository postRepository) { var dzi = new DeepZoomImage(_settings); foreach (var postId in postRepository.RetrievePostIds()) { dzi.SlicePostImage(postId); } }
internal static void GeneratePostImageResizes(Bitmap sourceBitmap, Size size, int maximumLevel, Action <int, Bitmap> saveAction) { for (var level = maximumLevel; level >= 0; level--) { var targetSize = DeepZoomImage.ComputeLevelSize(size, level); using (var resizedBitmap = DeepZoomImage.Resize(sourceBitmap, targetSize.Width, targetSize.Height)) { saveAction(level, resizedBitmap); } } }
internal static void GenerateImageSlices(Settings settings, PostRepository postRepository) { var size = settings.ItemImageSize; var maximumLevel = DeepZoomImage.DetermineMaximumLevel(size); var imageFormat = settings.PostImageEncoding; var imageExtension = imageFormat.ToString().ToLower(); var fileNameIdFormat = settings.FileNameIdFormat; foreach (var postId in postRepository.RetrievePostIds()) { SlicePostImage(postId, size, maximumLevel, imageExtension, fileNameIdFormat, imageFormat, settings.TileSize, settings.TileOverlap); } }
internal static void SlicePostImage(int postId, Size size, int maximumLevel, string extension, string fileNameIdFormat, ImageFormat imageFormat, int tileSize, int tileOverlap) { var workingPath = Path.GetFullPath(WorkingFolderName); var outputPath = Path.GetFullPath(OutputFolderName); var relativeBinnedImageFolder = Post.ComputeBinnedPath(postId, null, fileNameIdFormat) + "_files"; var absoluteBinnedImageFolder = Path.Combine(workingPath, relativeBinnedImageFolder); var absoluteBinnedOutputImageFolder = Path.Combine(outputPath, relativeBinnedImageFolder); for (var level = maximumLevel; level >= 0; level--) { var levelName = Convert.ToString(level, 10); var targetSize = DeepZoomImage.ComputeLevelSize(size, level); var tileFiles = new List <Stream> (); var inputLevelImageFile = Path.ChangeExtension(levelName, extension); var inputLevelImagePath = Path.Combine(absoluteBinnedImageFolder, inputLevelImageFile); var outputLevelFolder = Path.Combine(absoluteBinnedOutputImageFolder, levelName); Directory.CreateDirectory(outputLevelFolder); var tiles = DeepZoomImage.ComputeTiles(targetSize, tileSize, tileOverlap); using (var inputStream = new FileStream(inputLevelImagePath, FileMode.Open, FileAccess.Read, FileShare.Read)) using (var levelBitmap = new Bitmap(inputStream)) { DeepZoomImage.Slice(levelBitmap, tiles, imageFormat, tileName => { var tileFileName = Path.ChangeExtension(tileName, extension); var tilePath = Path.Combine(outputLevelFolder, tileFileName); var stream = new FileStream(tilePath, FileMode.Create, FileAccess.Write, FileShare.Read); tileFiles.Add(stream); return(stream); } ); } foreach (var stream in tileFiles) { stream.Close(); } } }
public ImageCollectionTile(int row, int column, int startingMortonNumber, IEnumerable <int> ids) { _row = row; _column = column; _startingMortonNumber = startingMortonNumber; _tileName = DeepZoomImage.TileName(row, column); _ids = new List <int> (ids).AsReadOnly(); var hashCode = _row ^ _column ^ _startingMortonNumber; foreach (var id in ids) { hashCode ^= id.GetHashCode(); } _hashCode = hashCode; var count = _ids.Count; var countPlural = 1 == count ? "" : "s"; var firstMorton = startingMortonNumber; var lastMorton = firstMorton + count - 1; _toString = ToStringTemplate.FormatInvariant(_tileName, count, countPlural, firstMorton, lastMorton); }
internal void GeneratePostImageResizes (PostRepository postRepository) { var dzi = new DeepZoomImage (_settings); var workingPath = _settings.AbsoluteWorkingFolder; var imageFormat = _settings.PostImageEncoding; var extension = imageFormat.GetName (); var fileNameIdFormat = _settings.FileNameIdFormat; foreach (var postId in postRepository.RetrievePostIds ()) { var relativeBinnedImagePath = Post.ComputeBinnedPath (postId, extension, fileNameIdFormat); var absoluteBinnedImagePath = Path.Combine (workingPath, relativeBinnedImagePath); var relativeBinnedImageFolder = Post.ComputeBinnedPath (postId, null, fileNameIdFormat) + "_files"; var absoluteBinnedImageFolder = Path.Combine (workingPath, relativeBinnedImageFolder); Directory.CreateDirectory (absoluteBinnedImageFolder); using (var inputStream = absoluteBinnedImagePath.CreateReadStream ()) using (var sourceBitmap = new Bitmap (inputStream)) { dzi.GeneratePostImageResizes (sourceBitmap, (level, resizedBitmap) => { var levelImageName = "{0}.{1}".FormatInvariant (level, extension); var levelImagePath = Path.Combine (absoluteBinnedImageFolder, levelImageName); using (var outputStream = levelImagePath.CreateReadStream ()) { resizedBitmap.Save (outputStream, imageFormat); } } ); } } }
internal void GenerateImageSlices(PostRepository postRepository) { var dzi = new DeepZoomImage (_settings); foreach (var postId in postRepository.RetrievePostIds ()) { dzi.SlicePostImage (postId); } }