深度缩放图像创建会在c#

时间:2017-01-24 08:19:23

标签: c# deepzoom

我建立了一个使用枢轴查看器的网站,该查看器使用深度缩放集合来显示数据库中的图像和元数据。我使用microsoft的deezoomtools.dll来创建深度缩放集合。

从这个网站我可以开始一个线程,开始创建几个集合。对于小型集合,这个过程很顺利,但是当进行大型集合时,它会定期失败。

我添加了一些调试行来查看发生了什么,我得到的异常是: 线程作为消息中止,并作为堆栈跟踪来自它。

我发现处理图像时会发生异常。我想在函数 GetImageForDeepZoomComposer

中的代码示例中发生错误
 private bool processImage(Item collectionItem, string backupImage,StreamWriter _logFile)
    {
        try
        {
            _logFile.WriteLine("start process");
            if (string.IsNullOrEmpty(collectionItem.Image))
                return false;
            if (!File.Exists(collectionItem.ImagePath))
                return false;
            _logFile.WriteLine("File is there");
            if (!AllImagesUnique) // check to see if we have processed this exact file before.
                if (cacheOfImageIds.ContainsKey(collectionItem.ImagePath)) // we already have have processed this image so don't do it again
                {
                    collectionItem.ImageId = cacheOfImageIds[collectionItem.ImagePath];
                    return true;
                }

            _logFile.WriteLine("Get Image: " + collectionItem.ImagePath);
            string workingImage = GetImageForDeepZoomComposer(collectionItem.ImagePath, collectionItem.Id);
            _logFile.WriteLine("Image aquired");

            _logFile.WriteLine("collection name and id");
            string deepZoomImage = DeepZoomImageDir + collectionItem.Id;

            sendAction(string.Format("\tConverting image {0} to Deep Zoom Output file {1} ", workingImage,
                                             deepZoomImage));
            //imageCreator.Create(workingImage, deepZoomImage);
            _logFile.WriteLine("set image surrogate");
            SurrogateImageInfo sii = new SurrogateImageInfo(workingImage, "DeepZoomImages/" + Path.GetFileName(deepZoomImage) + ".xml");
            _logFile.WriteLine("image surrogate set");
            images.Add(sii);
            if (!AllImagesUnique) // if we want to make sure we don't use the Deep Zoom Composer on the same file twice then add this image to the cache
                cacheOfImageIds.Add(collectionItem.ImagePath, collectionItem.Id);
            return true;
        }
        catch (Exception ex)
        {
            _logFile.WriteLine(ex.Message);

            sendAction(
                string.Format(
                    "\tSkipping current item cause of execption encountered while processing the image\r\n\t\t{0}",
                    ex.Message));                             
            return false; // this item will not be added to the collection
        }
    }

 internal string GetImageForDeepZoomComposer(string imageFile,int id)
    {
        if (imageFile.StartsWith("http://") || imageFile.StartsWith("https://"))
        {
            if (_client == null) // if we havent used the WebClient for this collection yet create one
                _client = new WebClient();

            string tempFile = ImageDownloadDir + Guid.NewGuid();
            sendAction(string.Format("\tDownloading image '{0} to {1}", imageFile, tempFile));
            _client.DownloadFile(imageFile, tempFile);
            return tempFile;
        }
        else if (imageFile.StartsWith("\\") || imageFile.StartsWith("E:\\") || imageFile.StartsWith("e:\\"))
        {

            var dir = Path.Combine(DeepZoomImageDir, id.ToString() + "_files");
            //if (!Directory.Exists(dir))
            //    Directory.CreateDirectory(dir);
            var fixedSizeFileName = imageFile.Replace("_thumb", "_fs");
            //create a fixed size image if it's not already created
            if (!File.Exists(fixedSizeFileName))
                FixedSize(new System.Drawing.Bitmap(imageFile), 512, 512).Save(fixedSizeFileName,codecInfo,parameters);
            //copy the fixed size image to the DeepZoomImages folder so it can be used when zooming in to the deepest level
            var localFixedSizeImage = Path.Combine(DeepZoomImageDir, id + ".jpg");
            File.Copy(fixedSizeFileName, localFixedSizeImage);
            return localFixedSizeImage;
        }
        return imageFile;
    }

我认为它与尝试获取图像并尝试使用不同名称保存图像时锁定的图像有关,因此可以使用它。我真的不知所措。

提前感谢您提供信息

0 个答案:

没有答案