using System; using System.Drawing; using System.Runtime.InteropServices; using Microsoft.Win32; using System.Reflection; using System.Collections.Generic; using System.Windows.Forms; using System.IO; namespace Lskj.PubArtworkPreview { public static class picture { public static byte[] GetFileBytes(string fileName, bool largeIcon) { SHFILEINFO info = new SHFILEINFO(true); int cbFileInfo = Marshal.SizeOf(info); SHGFI flags; if (largeIcon) flags = SHGFI.Icon | SHGFI.LargeIcon | SHGFI.UseFileAttributes; else flags = SHGFI.Icon | SHGFI.SmallIcon | SHGFI.UseFileAttributes; SHGetFileInfo(fileName, 256, out info, (uint)cbFileInfo, flags); byte[] bytes = ImgToByte(Icon.FromHandle(info.hIcon).ToBitmap()); info.hIcon = IntPtr.Zero; info.iIcon = 0; info.dwAttributes = 0; info.szDisplayName = ""; info.szTypeName = ""; return bytes; } public static byte[] ImgToByte(Image img) { try { using (MemoryStream ms = new MemoryStream()) { byte[] imagedata = null; img.Save(ms, System.Drawing.Imaging.ImageFormat.Png); imagedata = ms.GetBuffer(); return imagedata; } } catch (Exception ex) { MessageBox.Show(ex.ToString()); return null; } } [DllImport("Shell32.dll")] private static extern int SHGetFileInfo ( string pszPath, uint dwFileAttributes, out SHFILEINFO psfi, uint cbfileInfo, SHGFI uFlags ); [StructLayout(LayoutKind.Sequential)] private struct SHFILEINFO { public SHFILEINFO(bool b) { hIcon = IntPtr.Zero; iIcon = 0; dwAttributes = 0; szDisplayName = ""; szTypeName = ""; } public IntPtr hIcon; public int iIcon; public uint dwAttributes; [MarshalAs(UnmanagedType.LPStr, SizeConst = 260)] public string szDisplayName; [MarshalAs(UnmanagedType.LPStr, SizeConst = 80)] public string szTypeName; } private enum SHGFI { SmallIcon = 0x00000001, LargeIcon = 0x00000000, Icon = 0x00000100, DisplayName = 0x00000200, Typename = 0x00000400, SysIconIndex = 0x00004000, UseFileAttributes = 0x00000010 } } }