11

を呼び出そうとすると、このコードは失敗しますImage.Save(MemoryStream, ImageFormat)

私は例外を受け取ります:

値を null にすることはできません。パラメータ名: エンコーダ"

ImageFormat format = generatedImage.RawFormat as ImageFormat;
image.ImageData = generatedImage.Save(format);

ImageFormatオブジェクトを直接渡すと機能しますImageFormat.Jpeg

を変換する最良の方法は何ですかrawformat(ImageFormat理想的には、switch ステートメントや多数の if ステートメントなしで)

ありがとうベン

4

8 に答える 8

17

同じために次のヘプラーメソッドを使用します:

public static string GetMimeType(Image i)
{
    var imgguid = i.RawFormat.Guid;
    foreach (ImageCodecInfo codec in ImageCodecInfo.GetImageDecoders()) 
    {
        if (codec.FormatID == imgguid)
            return codec.MimeType;
    }
    return "image/unknown";
}
于 2011-06-13T21:14:28.050 に答える
11

申し訳ありませんが、解析または生成された Image オブジェクトから「適切な」 ImageFormat を直接抽出する可能性はありませんでした。

これは私のコードです。mimetype の代わりに静的な ImageFormat メンバーを格納することで採用できます。

                if (image.RawFormat.Equals(ImageFormat.Jpeg))
                    binary.MetaInfo.Mimetype = "image/jpeg";
                else if (image.RawFormat.Equals(ImageFormat.Bmp))
                    binary.MetaInfo.Mimetype = "image/bmp";
                else if (image.RawFormat.Equals(ImageFormat.Emf))
                    binary.MetaInfo.Mimetype = "image/emf";
                else if (image.RawFormat.Equals(ImageFormat.Exif))
                    binary.MetaInfo.Mimetype = "image/exif";
                else if (image.RawFormat.Equals(ImageFormat.Gif))
                    binary.MetaInfo.Mimetype = "image/gif";
                else if (image.RawFormat.Equals(ImageFormat.Icon))
                    binary.MetaInfo.Mimetype = "image/icon";
                else if (image.RawFormat.Equals(ImageFormat.Png))
                    binary.MetaInfo.Mimetype = "image/png";
                else if (image.RawFormat.Equals(ImageFormat.Tiff))
                    binary.MetaInfo.Mimetype = "image/tiff";
                else if (image.RawFormat.Equals(ImageFormat.Wmf))
                    binary.MetaInfo.Mimetype = "image/wmf";

静的な ImageFormat メンバーの配列を使用して整理することもできますが、切り替えやループを避けることはできないと思います。

よろしく、 マティアス

于 2011-04-26T13:53:19.487 に答える
7

これを探していますか?


System.Drawing.Imaging.ImageFormat fmt = new System.Drawing.Imaging.ImageFormat(generatedImage.RawFormat.Guid);
于 2012-11-11T23:30:25.400 に答える
0

Cheburek の回答の VB.NET 翻訳:

Private Function GetMimeType(i As Drawing.Image) As String
    Dim imgguid As Guid = i.RawFormat.Guid
    For Each codec As ImageCodecInfo In ImageCodecInfo.GetImageDecoders()
        If (codec.FormatID = imgguid) Then
            Return codec.MimeType
        End If
    Next
    Return "image/unknown"
End Function
于 2014-01-17T13:01:10.123 に答える