/// <summary> /// Converts a PNG image to a icon (ico) /// </summary> /// <param name="inputPath">The input path</param> /// <param name="outputPath">The output path</param> /// <param name="size">The size (16x16 px by default)</param> /// <param name="preserveAspectRatio">Preserve the aspect ratio</param> /// <returns>Wether or not the icon was succesfully generated</returns> public static bool ConvertPNGToIcon(string inputPath, string outputPath, int size = 256, bool preserveAspectRatio = true) { using (FileStream inputStream = new FileStream(inputPath, FileMode.Open)) using (FileStream outputStream = new FileStream(outputPath, FileMode.OpenOrCreate)) { return ConvertToIcon(inputStream, outputStream, size, preserveAspectRatio); } } /// <summary> /// Converts a PNG image to a icon (ico) /// </summary> /// <param name="input">The input stream</param> /// <param name="output">The output stream</param> /// <param name="size">The size (16x16 px by default)</param> /// <param name="preserveAspectRatio">Preserve the aspect ratio</param> /// <returns>Wether or not the icon was succesfully generated</returns> public static bool ConvertPNGToIcon(Stream input, Stream output, int size = 16, bool preserveAspectRatio = false) { Bitmap inputBitmap = (Bitmap)Bitmap.FromStream(input); if (inputBitmap != null) { int width, height; if (preserveAspectRatio) { width = size; height = inputBitmap.Height / inputBitmap.Width * size; } else { width = height = size; } Bitmap newBitmap = new Bitmap(inputBitmap, new System.Drawing.Size(width, height)); if (newBitmap != null) { // save the resized png into a memory stream for future use using (MemoryStream memoryStream = new MemoryStream()) { newBitmap.Save(memoryStream, ImageFormat.Png); BinaryWriter iconWriter = new BinaryWriter(output); if (output != null && iconWriter != null) { // 0-1 reserved, 0 iconWriter.Write((byte)0); iconWriter.Write((byte)0); // 2-3 image type, 1 = icon, 2 = cursor iconWriter.Write((short)1); // 4-5 number of images iconWriter.Write((short)1); // image entry 1 // 0 image width iconWriter.Write((byte)width); // 1 image height iconWriter.Write((byte)height); // 2 number of colors iconWriter.Write((byte)0); // 3 reserved iconWriter.Write((byte)0); // 4-5 color planes iconWriter.Write((short)0); // 6-7 bits per pixel iconWriter.Write((short)32); // 8-11 size of image data iconWriter.Write((int)memoryStream.Length); // 12-15 offset of image data iconWriter.Write((int)(6 + 16)); // write image data // png data must contain the whole png data file iconWriter.Write(memoryStream.ToArray()); iconWriter.Flush(); return true; } } } return false; } return false; } 调用: string sourceurl = @"C:\Users\wh\Desktop\摄像头1-01.png"; string outUrl = @"C:\Users\wh\Desktop\pt.ico"; bool bl = FileHelper.ConvertPNGToIcon(sourceurl, outUrl);
标签:iconWriter,ico,c#,image,Write,new,byte,size,图标 From: https://www.cnblogs.com/wenghan/p/17453282.html