【问题标题】:How to return the type of a class based on a FileType如何根据 FileType 返回类的类型
【发布时间】:2021-04-03 22:38:30
【问题描述】:

我正在研究图像处理过程。我正在使用 Aspose 图像处理器。我想按图像类型获取相关类。比如,gif、png、jpeg等。

例如,以下代码块可用于生成 png 图像。我想将其作为通用类型,并希望使用通用类型而不是 PngOptions 和 PngImage。

        PngOptions options = new();

        using (PngImage image = (PngImage)Image.Create(options, fileInformation.Width, fileInformation.Height))
        {
            Graphics graphic = new Graphics(image);
            graphic.Clear(Color.Green);
            // Draw line on image
            graphic.DrawLine(new Pen(Color.Blue), 9, 9, 90, 90);

            // Resize image
            int newWidth = 400;
            image.ResizeWidthProportionally(newWidth, ResizeType.AdaptiveResample);

            // Crop the image to specified area
            AsponseRectangle area = new AsponseRectangle(10, 10, 200, 200);

            image.Crop(area);

            image.Save();
        }

Png Options 继承自 ImageOptionsBase,PngImage 继承自 RasterCachedImage。我正在尝试根据文件类型获取我应该使用哪种选项。你可以看到下面的代码。它返回一个错误,指出“GifOptions 是一种类型,在给定的上下文中无效。”我无法在脑海中完全确定结构。如果有人能给出一个想法,我会很高兴。

     private Dictionary<ImageOptionsBase, RasterCachedImage> GetFileTypes(RequestFileType requestFileType)
    {
        switch (requestFileType)
        {
            case RequestFileType.Bmp:
                return new Dictionary<ImageOptionsBase, RasterCachedImage>() { BmpOptions, BmpImage };
            case RequestFileType.Gif:
                return new Dictionary<ImageOptionsBase, RasterCachedImage>() { GifOptions, GifImage };
            case RequestFileType.Dicom:
                break;
            case RequestFileType.Djvu:
                break;
            case RequestFileType.Dng:
                break;
            case RequestFileType.Emf:
                break;
            case RequestFileType.Jpeg:
                break;
            case RequestFileType.Jpeg2000:
                break;
            case RequestFileType.Pdg:
                break;
            case RequestFileType.Png:
                break;
            case RequestFileType.Apng:
                break;
            case RequestFileType.Psd:
                break;
            case RequestFileType.Svg:
                break;
            case RequestFileType.Tiff:
                break;
            case RequestFileType.Dib:
                break;
            case RequestFileType.Eps:
                break;
            case RequestFileType.WebP:
                break;
            case RequestFileType.Wmf:
                break;
            case RequestFileType.Cdr:
                break;
            case RequestFileType.Cmx:
                break;
            case RequestFileType.Otg:
                break;
            case RequestFileType.Pdf:
                break;
            case RequestFileType.Html5Canvas:
                break;
            case RequestFileType.Emz:
                break;
            case RequestFileType.Wmz:
                break;
            case RequestFileType.Tga:
                break;
            case RequestFileType.Svgz:
                break;
            default:
                break;
        }
    }

【问题讨论】:

    标签: c# generics image-processing aspose


    【解决方案1】:

    我不确定您要达到什么目的,但“GifOptions is a type, which is not valid in the given context.”表示您正在尝试使用一种类型,而预期会出现其他情况。在您的情况下,初始化字典时需要一个对象(不是类)。

    当你初始化一个字典时,你需要给它对象来存储而不是只存储对象类型。

    同样,我不确定您使用的是什么对象,但也许以下行将有助于理解问题。请注意new

    return new Dictionary<ImageOptionsBase, RasterCachedImage>() { new BmpOptions(), ... };
    

    【讨论】:

      猜你喜欢
      • 2019-12-14
      • 2021-09-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多