黑色背景上的文件图标

时间:2019-02-12 20:08:10

标签: c# html

我有一个用于在PC上搜索文件的程序,我认为显示所有代码毫无意义,因为问题有所不同。 我正在尝试通过javascript和html显示文件图标(使用CefSharp)。一切正常,显示了图标,但是...为什么显示黑色背景?在文件本身上,它是透明的,但是当输出到base64时,它将变成黑色背景。有可能解决这个问题吗? 获取字节函数:

private byte[] GetBytes(Icon icon)
{
    MemoryStream ms = new MemoryStream();
    icon.Save(ms);
    return ms.ToArray();
}

文件路径功能中的图标:

public static Icon IconFromFilePath(string filePath)
{
    var result = (Icon)null;

    try
    {
        result = Icon.ExtractAssociatedIcon(filePath);
    }
    catch (System.Exception)
    {
    }

    return result;
}

图标字节到Base64:

var theIcon = IconFromFilePath(f.FullName); //f.FullName - full path to file
byte[] imageArray = GetBytes(theIcon);
string base64ImageRepresentation = Convert.ToBase64String(imageArray);

测试图标:

<img src="data:image/x-icon;base64,AAABAAEAICAQcQAAAADoAgAAFgAAACgAAAAgAAAAQAAAAAEABAAAAAAAgAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAAAAgIAAgAAAAIAAgACAgAAAgICAAMDAwAAAAP8AAP8AAAD//wD/AAAA/wD/AP//AAD///8AAAAACIh3AAAAAAAAAAAAAAAIh3iIdwAAAAAAAAAAAAAACIiIiHeHd3d3d3d3AAAAAAiIiIiIh4//////9wAAAAAIiIiIiIiI//////cAAAAAiIiIiIiIj//////3AAAAiIiIiIiIiP//////9wAAAIiIh3j4iIj///////cAAACIiHd/+IiI///////3AAAAiIh3j/iIiI//////9wAAAA+Id4/4iIiP//////cAAACPiIePiIiIj//////3AAAA+IiIiIiIj///////9wAAAPiIiIiIiP////////cAAAD4j4iIj4j////////3AAAAiIiPiP+I////////9wAAAAAP+Ij4iP////////cAAAAAD/iI///////////3AAAAAAAH////////////9wAAAAAAB/////////////cAAAAAAAf////////////3AAAAAAAH////////////9wAAAAAAB/////////////cAAAAAAAj////////////3AAAAAAAI/////////4d3dwAAAAAACP////////+P/4cAAAAAAAj/////////j/h3AAAAAAAI/////////4+HcAAAAAAACP////////+PdwAAAAAAAAiIiIh3d3d3d3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==" width="100">

1 个答案:

答案 0 :(得分:0)

这对我有用:

public static Icon IconFromFilePath(string filePath)
{
    var result = (Icon)null;

    try
    {
        result = Icon.ExtractAssociatedIcon(filePath);
    }
    catch (System.Exception)
    {
    }

    return result;
}

public Bitmap FromIconToBitmap(Icon icon)
{
    Bitmap bmp = new Bitmap(icon.Width, icon.Height);
    using (Graphics gp = Graphics.FromImage(bmp))
    {
        gp.Clear(Color.Transparent);
        gp.DrawIcon(icon, new Rectangle(0, 0, icon.Width, icon.Height));
    }
    return bmp;
}

public static byte[] ImageToByte(Image img)
{
    ImageConverter converter = new ImageConverter();
    return (byte[])converter.ConvertTo(img, typeof(byte[]));
}

用法:

var theIcon = IconFromFilePath(f.FullName); //f.FullName - full path to file
byte[] imageArray = ImageToByte(FromIconToBitmap(theIcon));
string base64ImageRepresentation = Convert.ToBase64String(imageArray);