有关c#GDI绘图的一些方法
来源:互联网 发布:冒险岛市场数据库 编辑:程序博客网 时间:2024/05/02 04:41
using System;
using System.Collections.Generic;
using System.Text;
using System.Drawing;
using System.Drawing.Imaging;
using System.Collections;
using System.IO;
using System.Drawing.Drawing2D;
namespace Tif
...{
class TifEdit
...{
//用白色擦除
/**//// <summary>
/// 白色擦除
/// </summary>
/// <param name="bmp">图片文件</param>
/// <param name="p0">擦除区域的左上角坐标</param>
/// <param name="p1">擦除区域的又下角坐标</param>
/// <param name="RectColor">橡皮的颜色</param>
/// <returns>返回修改后的位图文件</returns>
public static Bitmap FillRectangleInPicture(Bitmap bmp, Point p0, Point p1, Color RectColor)
...{
if (bmp == null)
return null;
Graphics g = Graphics.FromImage(bmp);
Brush brush = new SolidBrush(RectColor);
// g.DrawRectangle(pen, new Rectangle(p0.X, p0.Y, Math.Abs(p0.X - p1.X), Math.Abs(p0.Y - p1.Y)));
g.FillRectangle(brush, new Rectangle(p0.X, p0.Y, Math.Abs(p0.X - p1.X), Math.Abs(p0.Y - p1.Y)));
g.Dispose();
return bmp;
}
//画线
/**//// <summary>
/// 画直线
/// </summary>
/// <param name="bmp">图片文件</param>
/// <param name="p0">直线的起始坐标</param>
/// <param name="p1">直线的终止坐标</param>
/// <param name="LineColor">直线的颜色</param>
/// <param name="LineWidth">直线的宽度</param>
/// <param name="ds">直线的样式</param>
/// <returns></returns>
public static Bitmap DrawLineInPicture(Bitmap bmp, Point p0, Point p1, Color LineColor, int LineWidth, DashStyle ds)
...{
if (bmp == null) return null;
if (p0.X == p1.X || p0.Y == p1.Y) return bmp;
Graphics g = Graphics.FromImage(bmp);
Brush brush = new SolidBrush(LineColor);
Pen pen = new Pen(brush, LineWidth);
//pen.Alignment = PenAlignment.Inset;
pen.DashStyle = ds;
g.DrawLine(pen,p0,p1);
g.Dispose();
return bmp;
}
//画矩形
/**//// <summary>
/// 画矩形
/// </summary>
/// <param name="bmp">图片文件</param>
/// <param name="p0">矩形的左上角坐标</param>
/// <param name="p1">矩形的右下角坐标</param>
/// <param name="RectColor">矩形边框的颜色</param>
/// <param name="LineWidth">矩形边框的宽度</param>
/// <param name="ds">矩形边框的样式</param>
/// <returns></returns>
public static Bitmap DrawRectangleInPicture(Bitmap bmp, Point p0, Point p1, Color RectColor, int LineWidth,DashStyle ds)
...{
if (bmp == null) return null;
Graphics g = Graphics.FromImage(bmp);
Brush brush = new SolidBrush(RectColor);
Pen pen = new Pen(brush, LineWidth);
pen.DashStyle = ds;
g.DrawRectangle(pen, new Rectangle(p0.X, p0.Y, Math.Abs(p0.X - p1.X), Math.Abs(p0.Y - p1.Y)));
g.Dispose();
return bmp;
}
//合并TIF
/**//// <summary>
/// 多个TIF文件的合并保存
/// </summary>
/// <param name="imageFiles">要合并的图象文件路径数组</param>
/// <param name="outFile">输出图象文件的路径</param>
/// <param name="compressEncoder">文件保存的编码方式</param>
public static void JoinTiffImages(ArrayList imageFiles, string outFile, EncoderValue compressEncoder)
...{
try
...{
//If only one page in the collection, copy it directly to the target file.
if (imageFiles.Count == 1)
...{
File.Copy((string)imageFiles[0], outFile, true);
return;
}
//use the save encoder
System.Drawing.Imaging.Encoder enc = System.Drawing.Imaging.Encoder.SaveFlag;
EncoderParameters ep = new EncoderParameters(2);
ep.Param[0] = new EncoderParameter(enc, (long)EncoderValue.MultiFrame);
ep.Param[1] = new EncoderParameter(System.Drawing.Imaging.Encoder.Compression, (long)compressEncoder);
Bitmap pages = null;
int frame = 0;
ImageCodecInfo info = GetEncoderInfo("image/tiff");
foreach (string strImageFile in imageFiles)
...{
if (frame == 0)
...{
pages = (Bitmap)Image.FromFile(strImageFile);
//save the first frame
pages.Save(outFile, info, ep);
}
else
...{
//save the intermediate frames
ep.Param[0] = new EncoderParameter(enc, (long)EncoderValue.FrameDimensionPage);
Bitmap bm = (Bitmap)Image.FromFile(strImageFile);
pages.SaveAdd(bm, ep);
bm.Dispose();
}
if (frame == imageFiles.Count - 1)
...{
//flush and close.
ep.Param[0] = new EncoderParameter(enc, (long)EncoderValue.Flush);
pages.SaveAdd(ep);
}
frame++;
}
}
catch (Exception ex)
...{
#if DEBUG
Console.WriteLine(ex.Message);
#endif
throw;
}
return;
}
private static ImageCodecInfo GetEncoderInfo(String mimeType)
...{
int j;
ImageCodecInfo[] encoders;
encoders = ImageCodecInfo.GetImageEncoders();
for (j = 0; j < encoders.Length; ++j)
...{
if (encoders[j].MimeType == mimeType)
return encoders[j];
}
return null;
}
//合并Tiff
/**//// <summary>
/// 多个TIF文件的合并保存
/// </summary>
/// <param name="imageFiles">要合并的图象文件路径数组</param>
/// <param name="outFile">输出图象文件的路径</param>
/// <param name="compressEncoder">文件保存的编码方式</param>
public static void JoinTiffZJ(ArrayList imageArray, string outFile, EncoderValue compressEncoder)
...{
if (imageArray.Count == 1)
...{
File.Copy((string)imageArray[0], outFile, true);
return;
}
Bitmap multi=null;
ImageCodecInfo myImageCodecInfo;
System.Drawing.Imaging.Encoder myEncoder;
EncoderParameter myEncoderParameter;
EncoderParameters myEncoderParameters;
// Get an ImageCodecInfo object that represents the TIFF codec.
myImageCodecInfo = GetEncoderInfo("image/tiff");
// Create an Encoder object based on the GUID
// for the SaveFlag parameter category.
myEncoder = System.Drawing.Imaging.Encoder.SaveFlag;
// Create an EncoderParameters object.
// An EncoderParameters object has an array of EncoderParameter
// objects. In this case, there is only one
// EncoderParameter object in the array.
myEncoderParameters = new EncoderParameters(1);
// Save the first page (frame).保存第一帧
for (int i = 0; i < imageArray.Count; i++)
...{
if (i == 0)
...{
multi = new Bitmap(Image.FromFile((string)imageArray[i]));
myEncoderParameter = new EncoderParameter(myEncoder, (long)EncoderValue.MultiFrame);
myEncoderParameters.Param[0] = myEncoderParameter;
multi.Save(outFile, myImageCodecInfo, myEncoderParameters);
}
else
...{
// Save the second page (frame).
Bitmap page2 = new Bitmap(Image.FromFile((string)imageArray[i]));
myEncoderParameter = new EncoderParameter(myEncoder, (long)EncoderValue.FrameDimensionPage);
myEncoderParameters.Param[0] = myEncoderParameter;
multi.SaveAdd(page2, myEncoderParameters);
}
//关闭文件
if (i == imageArray.Count - 1)
...{
myEncoderParameter = new EncoderParameter(myEncoder, (long)EncoderValue.Flush);
myEncoderParameters.Param[0] = myEncoderParameter;
multi.SaveAdd(myEncoderParameters);
}
}
}
//写字
/**//// <summary>
/// 在图片上绘制文字
/// </summary>
/// <param name="b">图片文件</param>
/// <param name="txt">绘制的文字内容</param>
/// <param name="font">文字的字体信息</param>
/// <param name="c">文字的颜色</param>
/// <param name="x">文字绘制位置的x坐标</param>
/// <param name="y">文字绘制位置的y坐标</param>
/// <returns></returns>
public static Bitmap KiSetText(Bitmap b, string txt, Font font, Color c, int x, int y)
...{
if (b == null)
...{
return null;
}
Graphics g = Graphics.FromImage(b);
g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias;
SolidBrush sb = new SolidBrush(c);
g.DrawString(txt, font, sb, new PointF(x, y));
g.Dispose();
return b;
}
//画圈
/**//// <summary>
/// 画圈
/// </summary>
/// <param name="bmp">图片文件</param>
/// <param name="p0">圈的左上角坐标</param>
/// <param name="p1">圈的右下角坐标</param>
/// <param name="RectColor">圈的边框的颜色</param>
/// <param name="LineWidth">圈的边框的宽度</param>
/// <param name="ds">圈的边框的样式</param>
/// <returns></returns>
public static Bitmap DrawRoundInPicture(Bitmap bmp, Point p0, Point p1, Color RectColor, int LineWidth, DashStyle ds)
...{
if (bmp == null) return null;
Graphics g = Graphics.FromImage(bmp);
Brush brush = new SolidBrush(RectColor);
Pen pen = new Pen(brush, LineWidth);
pen.DashStyle = ds;
g.DrawEllipse(pen, new Rectangle(p0.X, p0.Y, Math.Abs(p0.X - p1.X), Math.Abs(p0.Y - p1.Y)));
g.Dispose();
return bmp;
}
//填充的圈
/**//// <summary>
/// 画实心圈
/// </summary>
/// <param name="bmp">图片文件</param>
/// <param name="p0">圈的左上角坐标</param>
/// <param name="p1">圈的右下脚坐标</param>
/// <param name="RectColor">圈的颜色</param>
/// <returns></returns>
public static Bitmap FillEllipseInPicture(Bitmap bmp, Point p0, Point p1, Color RectColor)
...{
if (bmp == null)
return null;
Graphics g = Graphics.FromImage(bmp);
Brush brush = new SolidBrush(RectColor);
// g.DrawRectangle(pen, new Rectangle(p0.X, p0.Y, Math.Abs(p0.X - p1.X), Math.Abs(p0.Y - p1.Y)));
// g.FillRectangle(brush, new Rectangle(p0.X, p0.Y, Math.Abs(p0.X - p1.X), Math.Abs(p0.Y - p1.Y)));
g.FillEllipse(brush, new Rectangle(p0.X, p0.Y, Math.Abs(p0.X - p1.X), Math.Abs(p0.Y - p1.Y)));
g.Dispose();
return bmp;
}
//画路径
/**//// <summary>
///跟随鼠标画曲线
/// </summary>
/// <param name="bmp">图片文件</param>
/// <param name="graphPath">线的路径</param>
/// <param name="RectColor">线的颜色</param>
/// <param name="LineWidth">线的宽度</param>
/// <param name="ds">线的样式</param>
/// <returns></returns>
public static Bitmap DrawPathInPicture(Bitmap bmp, GraphicsPath graphPath, Color RectColor, int LineWidth, DashStyle ds)
...{
if (bmp == null)
return null;
Graphics g = Graphics.FromImage(bmp);
Brush brush = new SolidBrush(RectColor);
Pen pen = new Pen(brush, LineWidth);
pen.DashStyle = ds;
//g.DrawEllipse(pen, new Rectangle(p0.X, p0.Y, Math.Abs(p0.X - p1.X), Math.Abs(p0.Y - p1.Y)));
g.DrawPath(pen, graphPath);
g.Dispose();
return bmp;
}
}
}
using System.Collections.Generic;
using System.Text;
using System.Drawing;
using System.Drawing.Imaging;
using System.Collections;
using System.IO;
using System.Drawing.Drawing2D;
namespace Tif
...{
class TifEdit
...{
//用白色擦除
/**//// <summary>
/// 白色擦除
/// </summary>
/// <param name="bmp">图片文件</param>
/// <param name="p0">擦除区域的左上角坐标</param>
/// <param name="p1">擦除区域的又下角坐标</param>
/// <param name="RectColor">橡皮的颜色</param>
/// <returns>返回修改后的位图文件</returns>
public static Bitmap FillRectangleInPicture(Bitmap bmp, Point p0, Point p1, Color RectColor)
...{
if (bmp == null)
return null;
Graphics g = Graphics.FromImage(bmp);
Brush brush = new SolidBrush(RectColor);
// g.DrawRectangle(pen, new Rectangle(p0.X, p0.Y, Math.Abs(p0.X - p1.X), Math.Abs(p0.Y - p1.Y)));
g.FillRectangle(brush, new Rectangle(p0.X, p0.Y, Math.Abs(p0.X - p1.X), Math.Abs(p0.Y - p1.Y)));
g.Dispose();
return bmp;
}
//画线
/**//// <summary>
/// 画直线
/// </summary>
/// <param name="bmp">图片文件</param>
/// <param name="p0">直线的起始坐标</param>
/// <param name="p1">直线的终止坐标</param>
/// <param name="LineColor">直线的颜色</param>
/// <param name="LineWidth">直线的宽度</param>
/// <param name="ds">直线的样式</param>
/// <returns></returns>
public static Bitmap DrawLineInPicture(Bitmap bmp, Point p0, Point p1, Color LineColor, int LineWidth, DashStyle ds)
...{
if (bmp == null) return null;
if (p0.X == p1.X || p0.Y == p1.Y) return bmp;
Graphics g = Graphics.FromImage(bmp);
Brush brush = new SolidBrush(LineColor);
Pen pen = new Pen(brush, LineWidth);
//pen.Alignment = PenAlignment.Inset;
pen.DashStyle = ds;
g.DrawLine(pen,p0,p1);
g.Dispose();
return bmp;
}
//画矩形
/**//// <summary>
/// 画矩形
/// </summary>
/// <param name="bmp">图片文件</param>
/// <param name="p0">矩形的左上角坐标</param>
/// <param name="p1">矩形的右下角坐标</param>
/// <param name="RectColor">矩形边框的颜色</param>
/// <param name="LineWidth">矩形边框的宽度</param>
/// <param name="ds">矩形边框的样式</param>
/// <returns></returns>
public static Bitmap DrawRectangleInPicture(Bitmap bmp, Point p0, Point p1, Color RectColor, int LineWidth,DashStyle ds)
...{
if (bmp == null) return null;
Graphics g = Graphics.FromImage(bmp);
Brush brush = new SolidBrush(RectColor);
Pen pen = new Pen(brush, LineWidth);
pen.DashStyle = ds;
g.DrawRectangle(pen, new Rectangle(p0.X, p0.Y, Math.Abs(p0.X - p1.X), Math.Abs(p0.Y - p1.Y)));
g.Dispose();
return bmp;
}
//合并TIF
/**//// <summary>
/// 多个TIF文件的合并保存
/// </summary>
/// <param name="imageFiles">要合并的图象文件路径数组</param>
/// <param name="outFile">输出图象文件的路径</param>
/// <param name="compressEncoder">文件保存的编码方式</param>
public static void JoinTiffImages(ArrayList imageFiles, string outFile, EncoderValue compressEncoder)
...{
try
...{
//If only one page in the collection, copy it directly to the target file.
if (imageFiles.Count == 1)
...{
File.Copy((string)imageFiles[0], outFile, true);
return;
}
//use the save encoder
System.Drawing.Imaging.Encoder enc = System.Drawing.Imaging.Encoder.SaveFlag;
EncoderParameters ep = new EncoderParameters(2);
ep.Param[0] = new EncoderParameter(enc, (long)EncoderValue.MultiFrame);
ep.Param[1] = new EncoderParameter(System.Drawing.Imaging.Encoder.Compression, (long)compressEncoder);
Bitmap pages = null;
int frame = 0;
ImageCodecInfo info = GetEncoderInfo("image/tiff");
foreach (string strImageFile in imageFiles)
...{
if (frame == 0)
...{
pages = (Bitmap)Image.FromFile(strImageFile);
//save the first frame
pages.Save(outFile, info, ep);
}
else
...{
//save the intermediate frames
ep.Param[0] = new EncoderParameter(enc, (long)EncoderValue.FrameDimensionPage);
Bitmap bm = (Bitmap)Image.FromFile(strImageFile);
pages.SaveAdd(bm, ep);
bm.Dispose();
}
if (frame == imageFiles.Count - 1)
...{
//flush and close.
ep.Param[0] = new EncoderParameter(enc, (long)EncoderValue.Flush);
pages.SaveAdd(ep);
}
frame++;
}
}
catch (Exception ex)
...{
#if DEBUG
Console.WriteLine(ex.Message);
#endif
throw;
}
return;
}
private static ImageCodecInfo GetEncoderInfo(String mimeType)
...{
int j;
ImageCodecInfo[] encoders;
encoders = ImageCodecInfo.GetImageEncoders();
for (j = 0; j < encoders.Length; ++j)
...{
if (encoders[j].MimeType == mimeType)
return encoders[j];
}
return null;
}
//合并Tiff
/**//// <summary>
/// 多个TIF文件的合并保存
/// </summary>
/// <param name="imageFiles">要合并的图象文件路径数组</param>
/// <param name="outFile">输出图象文件的路径</param>
/// <param name="compressEncoder">文件保存的编码方式</param>
public static void JoinTiffZJ(ArrayList imageArray, string outFile, EncoderValue compressEncoder)
...{
if (imageArray.Count == 1)
...{
File.Copy((string)imageArray[0], outFile, true);
return;
}
Bitmap multi=null;
ImageCodecInfo myImageCodecInfo;
System.Drawing.Imaging.Encoder myEncoder;
EncoderParameter myEncoderParameter;
EncoderParameters myEncoderParameters;
// Get an ImageCodecInfo object that represents the TIFF codec.
myImageCodecInfo = GetEncoderInfo("image/tiff");
// Create an Encoder object based on the GUID
// for the SaveFlag parameter category.
myEncoder = System.Drawing.Imaging.Encoder.SaveFlag;
// Create an EncoderParameters object.
// An EncoderParameters object has an array of EncoderParameter
// objects. In this case, there is only one
// EncoderParameter object in the array.
myEncoderParameters = new EncoderParameters(1);
// Save the first page (frame).保存第一帧
for (int i = 0; i < imageArray.Count; i++)
...{
if (i == 0)
...{
multi = new Bitmap(Image.FromFile((string)imageArray[i]));
myEncoderParameter = new EncoderParameter(myEncoder, (long)EncoderValue.MultiFrame);
myEncoderParameters.Param[0] = myEncoderParameter;
multi.Save(outFile, myImageCodecInfo, myEncoderParameters);
}
else
...{
// Save the second page (frame).
Bitmap page2 = new Bitmap(Image.FromFile((string)imageArray[i]));
myEncoderParameter = new EncoderParameter(myEncoder, (long)EncoderValue.FrameDimensionPage);
myEncoderParameters.Param[0] = myEncoderParameter;
multi.SaveAdd(page2, myEncoderParameters);
}
//关闭文件
if (i == imageArray.Count - 1)
...{
myEncoderParameter = new EncoderParameter(myEncoder, (long)EncoderValue.Flush);
myEncoderParameters.Param[0] = myEncoderParameter;
multi.SaveAdd(myEncoderParameters);
}
}
}
//写字
/**//// <summary>
/// 在图片上绘制文字
/// </summary>
/// <param name="b">图片文件</param>
/// <param name="txt">绘制的文字内容</param>
/// <param name="font">文字的字体信息</param>
/// <param name="c">文字的颜色</param>
/// <param name="x">文字绘制位置的x坐标</param>
/// <param name="y">文字绘制位置的y坐标</param>
/// <returns></returns>
public static Bitmap KiSetText(Bitmap b, string txt, Font font, Color c, int x, int y)
...{
if (b == null)
...{
return null;
}
Graphics g = Graphics.FromImage(b);
g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias;
SolidBrush sb = new SolidBrush(c);
g.DrawString(txt, font, sb, new PointF(x, y));
g.Dispose();
return b;
}
//画圈
/**//// <summary>
/// 画圈
/// </summary>
/// <param name="bmp">图片文件</param>
/// <param name="p0">圈的左上角坐标</param>
/// <param name="p1">圈的右下角坐标</param>
/// <param name="RectColor">圈的边框的颜色</param>
/// <param name="LineWidth">圈的边框的宽度</param>
/// <param name="ds">圈的边框的样式</param>
/// <returns></returns>
public static Bitmap DrawRoundInPicture(Bitmap bmp, Point p0, Point p1, Color RectColor, int LineWidth, DashStyle ds)
...{
if (bmp == null) return null;
Graphics g = Graphics.FromImage(bmp);
Brush brush = new SolidBrush(RectColor);
Pen pen = new Pen(brush, LineWidth);
pen.DashStyle = ds;
g.DrawEllipse(pen, new Rectangle(p0.X, p0.Y, Math.Abs(p0.X - p1.X), Math.Abs(p0.Y - p1.Y)));
g.Dispose();
return bmp;
}
//填充的圈
/**//// <summary>
/// 画实心圈
/// </summary>
/// <param name="bmp">图片文件</param>
/// <param name="p0">圈的左上角坐标</param>
/// <param name="p1">圈的右下脚坐标</param>
/// <param name="RectColor">圈的颜色</param>
/// <returns></returns>
public static Bitmap FillEllipseInPicture(Bitmap bmp, Point p0, Point p1, Color RectColor)
...{
if (bmp == null)
return null;
Graphics g = Graphics.FromImage(bmp);
Brush brush = new SolidBrush(RectColor);
// g.DrawRectangle(pen, new Rectangle(p0.X, p0.Y, Math.Abs(p0.X - p1.X), Math.Abs(p0.Y - p1.Y)));
// g.FillRectangle(brush, new Rectangle(p0.X, p0.Y, Math.Abs(p0.X - p1.X), Math.Abs(p0.Y - p1.Y)));
g.FillEllipse(brush, new Rectangle(p0.X, p0.Y, Math.Abs(p0.X - p1.X), Math.Abs(p0.Y - p1.Y)));
g.Dispose();
return bmp;
}
//画路径
/**//// <summary>
///跟随鼠标画曲线
/// </summary>
/// <param name="bmp">图片文件</param>
/// <param name="graphPath">线的路径</param>
/// <param name="RectColor">线的颜色</param>
/// <param name="LineWidth">线的宽度</param>
/// <param name="ds">线的样式</param>
/// <returns></returns>
public static Bitmap DrawPathInPicture(Bitmap bmp, GraphicsPath graphPath, Color RectColor, int LineWidth, DashStyle ds)
...{
if (bmp == null)
return null;
Graphics g = Graphics.FromImage(bmp);
Brush brush = new SolidBrush(RectColor);
Pen pen = new Pen(brush, LineWidth);
pen.DashStyle = ds;
//g.DrawEllipse(pen, new Rectangle(p0.X, p0.Y, Math.Abs(p0.X - p1.X), Math.Abs(p0.Y - p1.Y)));
g.DrawPath(pen, graphPath);
g.Dispose();
return bmp;
}
}
}
- 有关c#GDI绘图的一些方法
- c#GDI+绘图速度的一些差异不理解
- GDI绘图方法的初步分析
- android简单的GDI绘图方法
- GDI绘图方法的初步分析
- visual c++GDI绘图
- C#GDI绘图
- C#GDI绘图流程
- C#GDI+简单绘图
- 关于C#GDI绘图
- C++/MFC-GDI绘图
- C# 使用GDI绘图技术
- 培训一:GDI绘图方法
- 关于C++,GDI的一些小体会
- 有关c的一些总结
- 提高GDI+绘制效率的一些方法
- 有关字符串的一些方法
- C#-gdi绘图,双缓冲绘图,Paint事件的触发---ShinePans
- c#中cookies的存取
- C# 截屏工具纯源码
- CComPtr对外不抛异常!
- jsp分页显示
- 欢迎你,我。
- 有关c#GDI绘图的一些方法
- MFC框架各部分指针获取方式
- AIX常用命令
- 求搭建OA系统的SSH框架
- VB编程中的Unicode vs Ansi
- 新人学习opengl,记录下遇到的问题以作记录
- 通过虚拟打印机WordToTIF ExcelToTif
- 不通过虚拟打印机word转tif
- 如何优化Microsoft Access提高速度