打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
C#中Bitmap类实现对图像操作的一些方法

导入以下两个包:

    System.Drawing;

      System.Drawing.Imaging;

建产对象:

     Bitmap bm = new Bitmap("c:/1.bmp");

缩放:

     Bitmap bm1 = new Bitmap(bm,width,height);

格式转换:

     bm.save("c:/1.jpg",ImageFromat.Jpeg);

     bm1.Save("c:/1.gif", ImageFormat.Gif);

剪切一个区域:

     //剪切大小

    int cutwidth;

      int cutheight;

     Graphics g;

     //以大小为剪切大小,像素格式为32位RGB创建一个位图对像

     Bitmap bm1 = new Bitmap(width,height,PixelFormat.Format32bppRgb) ;

    //定义一个区域

     Rectangle rg = new Rectangle(0,0,cutwidth,cutheight);

     //要绘制到的位图

     g = Graphics.FromImage(bm1);

     //将bm内rg所指定的区域绘制到bm1

     g.DrawImage(bm,rg)

============================================
C#Bitmap代替另一个Bitmap的某部分
Bitmap bm = new Bitmap(宽度, 高度);// 新建一个 Bitmap 位图 
System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(bm); // 根据新建的 Bitmap 位图,创建画布 
g.Clear(System.Drawing.Color.Black);// 使用黑色重置画布 
g.DrawImage(源位图, ......); // 绘制“源位图”,后面有若干参数控制大小、坐标等等功能。
==================================================
C# 图片处理之:旋转图片任意角度
     ///<summary>
        
/// 任意角度旋转
        
///</summary>
        
///<param name="bmp">原始图Bitmap</param>
        
///<param name="angle">旋转角度</param>
        
///<param name="bkColor">背景色</param>
        
///<returns>输出Bitmap</returns>

        publicstatic Bitmap KiRotate(Bitmap bmp, float angle, Color bkColor)
       
{
            
int w = bmp.Width +2;
            
int h = bmp.Height +2;

             PixelFormat pf;

            
if (bkColor == Color.Transparent)
           
{
                 pf 
= PixelFormat.Format32bppArgb;
             }

            
else
           
{
                 pf 
= bmp.PixelFormat;
             }


             Bitmap tmp 
=new Bitmap(w, h, pf);
             Graphics g 
= Graphics.FromImage(tmp);
             g.Clear(bkColor);
             g.DrawImageUnscaled(bmp, 
11);
             g.Dispose();

             GraphicsPath path 
=new GraphicsPath();
             path.AddRectangle(
new RectangleF(0f, 0f, w, h));
             Matrix mtrx 
=new Matrix();
             mtrx.Rotate(angle);
             RectangleF rct 
= path.GetBounds(mtrx);

             Bitmap dst 
=new Bitmap((int)rct.Width, (int)rct.Height, pf);
             g 
= Graphics.FromImage(dst);
             g.Clear(bkColor);
             g.TranslateTransform(
-rct.X, -rct.Y);
             g.RotateTransform(angle);
             g.InterpolationMode 
= InterpolationMode.HighQualityBilinear;
             g.DrawImageUnscaled(tmp, 
00);
             g.Dispose();

             tmp.Dispose();

            
return dst;
         }

-------------------------
这张图由以下代码产生。左面的是用DrawString函数直接绘制在Form上的,右面的是在Bitmap对象中绘制好后,DrawImage到窗体上的。可以看到文本显示效果非常不同。因为我想使用双缓冲,把大量文本先绘制在BitMap上,再让它显示出来,但是两种显示效果不一样是无法容忍的。请问,这是为什么?怎样让两种方法绘制的文本显示效果一模一样即使换了字体,两种方法的显示效果仍然不一致。
private void Form1_Paint(object sender, PaintEventArgs e)
{
    
    bmp = new Bitmap(ClientRectangle.Width, ClientRectangle.Height);
    Graphics gBmp = Graphics.FromImage(bmp);//内存位图
    Graphics gForm = e.Graphics;//Form
    for (int i = 1; i < 20; i++)
    {
        System.Drawing.Font f = new Font("宋体", i, FontStyle.Regular);
        gForm.DrawString("this is a test", f, Brushes.Black, new PointF(10f, i*Font.Height));
        gBmp.DrawString("this is a test", f, Brushes.Black, new PointF(0f, i * Font.Height));
    }
    gForm.DrawImage(bmp, new Point(200, 0));
}
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
C#图片处理之:在图片上画框(圈)
C# 使用 GDI 实现添加中心旋转(任意角度)的文字
Bitmap、CBitmap、HBITMAP以及BITMAP的相互转换
图片上传压缩成缩略图的代码
基于.Net C#的声音波形显示
GDI+无闪烁绘图
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服