Я хочу показать значок, связанный с типом файла.Что-то вроде этого
Но фон черный (в Firefox и IE), в Chrome он прозрачный, и это хорошо.
Мой контроллер
public ActionResult GetFileTypeIcon(string fileName)
{
var photo = PhotoModel.GetFileTypeIcon(fileName);
if (photo == null)
{
return File(Url.Content("~/Content/Images/nofile.png"), "image/png");
}
var stream = new MemoryStream(photo);
return File(stream.ToArray(), "image/bmp");
}
Я также пытаюсь преобразовать значок в png, но качество изображения очень плохое.
var stream = new MemoryStream(photo);
var iconStream = new MemoryStream();
Image.FromStream(stream).Save(iconStream, System.Drawing.Imaging.ImageFormat.Png);
return File(stream.ToArray(), "image/png");
view (я использую сетку devexpress)
@Html.DevExpress().GridView(settings =>
{
settings.Name = "attachmentsGrid";
settings.Columns.Add(col =>
{
col.Caption = "Назва";
col.SetDataItemTemplateContent(c =>
{
ViewContext.Writer.Write("<table><tr><td>");
//Html.DevExpress().BinaryImage(imageSettings =>
//{
// imageSettings.Width = 16;
// imageSettings.Height = 16;
//}).Bind(PhotoModel.GetFileTypeIcon(DataBinder.Eval(c.DataItem, "_name").ToString())).Render();
ViewContext.Writer.Write("<img height=\"16px\" width=\"16px\" src=\"" + Url.Action("GetFileTypeIcon", "Photo", new { fileName = DataBinder.Eval(c.DataItem, "_name").ToString() }) + "\" alt=\"image\" />");
ViewContext.Writer.Write("</td><td>");
ViewContext.Writer.Write("  ");
ViewContext.Writer.Write(
Html.ActionLink(DataBinder.Eval(c.DataItem, "_name").ToString(), "Download", new { Link = DataBinder.Eval(c.DataItem, "_link"), Name = DataBinder.Eval(c.DataItem, "_name") }));
ViewContext.Writer.Write("</td></tr></table>");
});
});
и метод, который возвращает изображение в виде байтового массива.RegisteredFileType.ExtractIconFromFile - возвращает Icon.
public static byte[] GetFileTypeIcon(string filename)
{
try
{
byte[] array;
var fileType = filename.Split('.').LastOrDefault();
fileType = "." + fileType.ToLower();
string fileAndParam = (_iconsInfo[fileType]).ToString();
if (String.IsNullOrEmpty(fileAndParam))
return null;
var icon = RegisteredFileType.ExtractIconFromFile(fileAndParam, false);
using (var ms = new MemoryStream())
{
icon.ToBitmap().Save(ms, System.Drawing.Imaging.ImageFormat.Bmp);
array = ms.ToArray();
}
return array;
}
catch (Exception)
{
return null;
}
меняю метод GetFileTypeInfo: теперь он возвращает Icon
var icon = RegisteredFileType.ExtractIconFromFile(fileAndParam, false);
return icon;
и контроллер
public ActionResult GetFileTypeIcon(string fileName)
{
var photo = PhotoModel.GetFileTypeIcon(fileName);
if (photo == null)
{
return File(Url.Content("~/Content/Images/nofile.png"), "image/png");
}
var stream = new MemoryStream();
photo.ToBitmap().Save(stream, System.Drawing.Imaging.ImageFormat.Png);
var iconStream = new MemoryStream();
Image.FromStream(stream).Save(iconStream, System.Drawing.Imaging.ImageFormat.Bmp);
return File(stream.ToArray(), "image/png");
}
теперь его рендерхорош в Chrome, Firefox, Safari и Opera, но в умрет IE IE его нет.