我有一个用于在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">
答案 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);