namespace Kompas.Mcp.Core.Vision;
/// Формат растра для снимка модели (значения ksRasterFormatEnum / ksRasterFormatParam.format).
public enum RasterImageFormat : short
{
Bmp = 0,
Gif = 1,
Jpg = 2,
Png = 3,
Tif = 4,
Tga = 5,
}
public static class RasterImageFormats
{
/// MIME-тип для image-контента MCP.
public static string MimeType(this RasterImageFormat format) => format switch
{
RasterImageFormat.Png => "image/png",
RasterImageFormat.Jpg => "image/jpeg",
RasterImageFormat.Bmp => "image/bmp",
RasterImageFormat.Gif => "image/gif",
RasterImageFormat.Tif => "image/tiff",
RasterImageFormat.Tga => "image/x-tga",
_ => "application/octet-stream",
};
/// Расширение файла без точки — постоянная строка без аллокации (в отличие от ToString().ToLower()).
public static string FileExtension(this RasterImageFormat format) => format switch
{
RasterImageFormat.Bmp => "bmp",
RasterImageFormat.Gif => "gif",
RasterImageFormat.Jpg => "jpg",
RasterImageFormat.Png => "png",
RasterImageFormat.Tif => "tif",
RasterImageFormat.Tga => "tga",
_ => format.ToString().ToLowerInvariant(),
};
public static RasterImageFormat Parse(string value) => value.Trim().ToLowerInvariant() switch
{
"png" => RasterImageFormat.Png,
"jpg" or "jpeg" => RasterImageFormat.Jpg,
"bmp" => RasterImageFormat.Bmp,
"gif" => RasterImageFormat.Gif,
"tif" or "tiff" => RasterImageFormat.Tif,
"tga" => RasterImageFormat.Tga,
_ => throw new ArgumentException($"Неизвестный формат растра '{value}'.", nameof(value)),
};
}