您的位置:首页 > 编程语言 > C#

利用C#转换图片格式,可转换为ico

2010-07-09 16:11 330 查看
using System;
using System.Collections.Generic;
using System.Text;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;

namespace paomiangege
{
public class ImageConvert
{
private int ICON_W = 64;
private int ICON_H = 64;

public ImageConvert()
{
}

//fileinpath,origaly picture file path,fileoutpath save filepath,index the ImageFormat you want to convert to
public string Convert(string fileinpath, string fileoutpath, string index)
{
try
{
Bitmap bitmap = new Bitmap(fileinpath);
index = index.ToLower();
switch (index)
{
case "jpg":  bitmap.Save(fileoutpath, ImageFormat.Jpeg); break;
case "jpeg": bitmap.Save(fileoutpath, ImageFormat.Jpeg); break;
case "bmp":  bitmap.Save(fileoutpath, ImageFormat.Bmp); break;
case "png": bitmap.Save(fileoutpath, ImageFormat.Png); break;
case "emf": bitmap.Save(fileoutpath, ImageFormat.Emf); break;
case "gif": bitmap.Save(fileoutpath, ImageFormat.Gif); break;
case "wmf": bitmap.Save(fileoutpath, ImageFormat.Wmf); break;
case "exif": bitmap.Save(fileoutpath, ImageFormat.Exif); break;
case "tiff":
{
Stream stream = File.Create(fileoutpath);
bitmap.Save(stream, ImageFormat.Tiff);
stream.Close();
} break;
case "ico":
{
Icon ico;
Stream stream = File.Create(fileoutpath);
ico = BitmapToIcon(bitmap, false);
ico.Save(stream);       //   save the icon
stream.Close();
}; break;
default: return "Error!";
}
return "Success!";
}
catch(Exception ex)
{
return ex.Message;
}
}

public string Convert(string fileinpath, string fileoutpath, string index,int width,int height)
{
if (width <= 0 || height <= 0)
return "error!size illegal!";
try
{
Bitmap mybitmap = new Bitmap(fileinpath);
Bitmap bitmap = new Bitmap(mybitmap, width, height);
index = index.ToLower();
switch (index)
{
case "jpg": bitmap.Save(fileoutpath, ImageFormat.Jpeg); break;
case "jpeg": bitmap.Save(fileoutpath, ImageFormat.Jpeg); break;
case "bmp": bitmap.Save(fileoutpath, ImageFormat.Bmp); break;
case "png": bitmap.Save(fileoutpath, ImageFormat.Png); break;
case "emf": bitmap.Save(fileoutpath, ImageFormat.Emf); break;
case "gif": bitmap.Save(fileoutpath, ImageFormat.Gif); break;
case "wmf": bitmap.Save(fileoutpath, ImageFormat.Wmf); break;
case "exif": bitmap.Save(fileoutpath, ImageFormat.Exif); break;
case "tiff":
{
Stream stream = File.Create(fileoutpath);
bitmap.Save(stream, ImageFormat.Tiff);
stream.Close();
} break;
case "ico":
{
if (height > 256 || width > 256)//ico maxsize 256*256
return "Error!Size illegal!";
Icon ico;
ICON_H = height;
ICON_W = width;
Stream stream = File.Create(fileoutpath);
ico = BitmapToIcon(mybitmap, true);
ico.Save(stream);       //   save the icon
stream.Close();
}; break;
default: return "Error!";
}
return "Success!";
}
catch (Exception ex)
{
return ex.Message;
}
}

private Icon BitmapToIcon(Bitmap obm, bool preserve)
{
Bitmap bm;
// if not preserving aspect
if (!preserve)        // if not preserving aspect
bm = new Bitmap(obm, ICON_W, ICON_H);  //   rescale from original bitmap

// if preserving aspect drop excess significance in least significant direction
else          // if preserving aspect
{
Rectangle rc = new Rectangle(0, 0, ICON_W, ICON_H);
if (obm.Width >= obm.Height)   //   if width least significant
{          //     rescale with width based on max icon height
bm = new Bitmap(obm, (ICON_H * obm.Width) / obm.Height, ICON_H);
rc.X = (bm.Width - ICON_W) / 2;  //     chop off excess width significance
if (rc.X < 0) rc.X = 0;
}
else         //   if height least significant
{          //     rescale with height based on max icon width
bm = new Bitmap(obm, ICON_W, (ICON_W * obm.Height) / obm.Width);
rc.Y = (bm.Height - ICON_H) / 2; //     chop off excess height significance
if (rc.Y < 0) rc.Y = 0;
}
bm = bm.Clone(rc, bm.PixelFormat);  //   bitmap for icon rectangle
}

// create icon from bitmap
Icon icon = Icon.FromHandle(bm.GetHicon()); // create icon from bitmap
bm.Dispose();        // dispose of bitmap
return icon;        // return icon
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: