C#图片按比例缩放实例

下面是关于C#图片按比例缩放实例的详细攻略。

步骤一:导入命名空间和设置窗口

首先,在代码中导入必要的命名空间,以使用Image类和Bitmap类。

using System.Drawing;
using System.Drawing.Imaging;

接着,在窗口中添加PictureBox控件,用于显示缩放后的图片。在属性中将SizeMode设置为Zoom,让图片自适应PictureBox控件的大小。

步骤二:加载原始图片

使用Image.FromFile方法加载本地的原始图片。

Image image = Image.FromFile(@"C:\path\to\image.jpg");

步骤三:对图片进行缩放

按比例缩放图片的方法是,根据目标宽度和原始宽度的比例,计算出目标长度,然后根据目标长度和原始长度的比例,计算出目标高度。使用Bitmap类的SetResolution方法设置图片的分辨率,以免出现锐化过度的情况。

int width = pictureBox1.Width;
int height = pictureBox1.Height;
float ratio = (float)width / (float)image.Width;
int newWidth = (int)(image.Width * ratio);
int newHeight = (int)(image.Height * ratio);
Bitmap bmp = new Bitmap(newWidth, newHeight, PixelFormat.Format24bppRgb);
bmp.SetResolution(image.HorizontalResolution, image.VerticalResolution);
Graphics graphic = Graphics.FromImage(bmp);
graphic.SmoothingMode = SmoothingMode.HighQuality;
graphic.InterpolationMode = InterpolationMode.HighQualityBicubic;
graphic.DrawImage(image, new Rectangle(0, 0, newWidth, newHeight));
graphic.Dispose();

完成缩放后,将Bitmap对象转换为Image对象,并设置到PictureBox控件中。

pictureBox1.Image = bmp;

示例说明一

下面是一个完整的图片按比例缩放实例。在这个例子中,我们使用了WinForms应用程序和一个PictureBox控件。用PictureBox显示原始图片和缩放后的图片。

using System.Drawing;
using System.Drawing.Drawing2D;
using System.Drawing.Imaging;
using System.Windows.Forms;

namespace ImageResize
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            Image image = Image.FromFile(@"C:\path\to\image.jpg");
            int width = pictureBox1.Width;
            int height = pictureBox1.Height;
            float ratio = (float)width / (float)image.Width;
            int newWidth = (int)(image.Width * ratio);
            int newHeight = (int)(image.Height * ratio);
            Bitmap bmp = new Bitmap(newWidth, newHeight, PixelFormat.Format24bppRgb);
            bmp.SetResolution(image.HorizontalResolution, image.VerticalResolution);
            Graphics graphic = Graphics.FromImage(bmp);
            graphic.SmoothingMode = SmoothingMode.HighQuality;
            graphic.InterpolationMode = InterpolationMode.HighQualityBicubic;
            graphic.DrawImage(image, new Rectangle(0, 0, newWidth, newHeight));
            graphic.Dispose();
            pictureBox1.Image = bmp;
        }
    }
}

示例说明二

有时,我们需要将多张图片按比例缩放后保存到本地。下面是一个例子,它可以加载多张图片,按比例缩放后将它们保存到指定文件夹。

using System;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Drawing.Imaging;
using System.IO;
using System.Windows.Forms;

namespace ImageBatchResize
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            var openFileDialog = new OpenFileDialog();
            openFileDialog.Multiselect = true;
            openFileDialog.Filter = "Image files (*.jpg, *.jpeg, *.png, *.bmp)|*.jpg;*.jpeg;*.png;*.bmp";

            if (openFileDialog.ShowDialog() == DialogResult.OK)
            {
                var saveFileDialog = new SaveFileDialog();
                saveFileDialog.Filter = "Image files (*.jpg, *.jpeg, *.png, *.bmp)|*.jpg;*.jpeg;*.png;*.bmp";
                saveFileDialog.InitialDirectory = @"C:\path\to\save\images";

                if (saveFileDialog.ShowDialog() == DialogResult.OK)
                {
                    foreach (var filePath in openFileDialog.FileNames)
                    {
                        Image image = Image.FromFile(filePath);
                        int width = pictureBox1.Width;
                        int height = pictureBox1.Height;
                        float ratio = (float)width / (float)image.Width;
                        int newWidth = (int)(image.Width * ratio);
                        int newHeight = (int)(image.Height * ratio);
                        Bitmap bmp = new Bitmap(newWidth, newHeight, PixelFormat.Format24bppRgb);
                        bmp.SetResolution(image.HorizontalResolution, image.VerticalResolution);
                        Graphics graphic = Graphics.FromImage(bmp);
                        graphic.SmoothingMode = SmoothingMode.HighQuality;
                        graphic.InterpolationMode = InterpolationMode.HighQualityBicubic;
                        graphic.DrawImage(image, new Rectangle(0, 0, newWidth, newHeight));
                        graphic.Dispose();
                        bmp.Save(Path.Combine(saveFileDialog.InitialDirectory, Path.GetFileName(filePath)), ImageFormat.Jpeg);
                    }
                }
            }
        }
    }
}

这个例子中,我们添加了一个OpenFileDialog控件,用于选择多个需要缩放的图片。然后,使用SaveFileDialog控件设置保存目录和文件名,并且使用Path类的Combine方法构建完整的文件路径。每次迭代中,我们都按比例缩放图片,并将缩放后的图片保存到本地。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#图片按比例缩放实例 - Python技术站

(0)
上一篇 2023年6月1日
下一篇 2023年6月1日

相关文章

  • C# httpwebrequest访问HTTPS错误处理方法

    下面是关于C# httpwebrequest访问HTTPS错误处理方法的完整攻略。 问题描述 当使用C#中的httpwebrequest请求HTTPS的时候,可能会遇到一些安全策略上的限制,导致请求失败或者返回错误信息。例如,常见的错误信息“Could not establish trust relationship for the SSL/TLS secu…

    C# 2023年5月14日
    00
  • C#中常使用进度条的代码

    让我来为你讲解如何在C#应用程序中使用进度条的代码。 1. 创建进度条控件 在Visual Studio中创建一个新的Windows Forms应用程序项目。然后,找到工具箱中的“ProgressBar”控件并将其拖放到窗体上。可以通过设置控件的属性来更改进度条的外观和行为,例如使进度条水平或垂直、更改颜色等等。 2. 编写代码更新进度条 进度条的名称应该是…

    C# 2023年6月7日
    00
  • asp.net 生成静态页时的进度条显示

    为了实现在 ASP.NET 生成静态页时显示进度条,需要实现以下步骤: 添加一个 WebForm 页面,用于显示进度条并更新进度。这个页面可以使用 AJAX 技术,在不刷新整个页面的情况下更新进度条。 在生成静态页的代码中,添加一个事件来通知页面更新进度。这个事件可以使用委托来定义,让生成静态页的代码在执行过程中调用委托,传递当前的进度值给页面。 在生成静态…

    C# 2023年6月1日
    00
  • C#中TransactionScope的使用小结

    C#中TransactionScope的使用小结 1. 什么是TransactionScope TransactionScope是C#中一个用于管理事务的类,位于System.Transactions命名空间中。它可以让多条语句成为一个事务,从而保证在一个事务中,要么所有语句都执行成功,要么全部失败。 2. TransactionScope的使用方法 步骤1…

    C# 2023年5月15日
    00
  • C#连接数据库的方法

    C#连接数据库的方法主要包含以下几个步骤: 引用相应的数据库驱动程序:在使用C#连接数据库之前,首先需要选择相应的数据库,并引用相应的数据库驱动程序。例如,如果要连接MySQL数据库,需要引用MySql.Data.dll库。 创建数据库连接:在C#中,可以使用SqlConnection类代表与SQL Server数据库的连接。创建SqlConnection对…

    C# 2023年5月15日
    00
  • Visual Studio Connected Services 生成http api 调用代码

    生成的代码将和接口对应的参数、返回值一一对应,本文底层使用的工具为NSwag.exe,其他可替代的方案还有AutoSet.exe。本文中生成的代码将在编译过程中自动编译,类似grpc生成代码的模式,如果使用AutoSet则需要手动引入代码。另外也可以使用NSwag对应的vs插件(https://marketplace.visualstudio.com/ite…

    C# 2023年5月11日
    00
  • C# ThreadPool之QueueUserWorkItem使用案例详解

    C# ThreadPool之QueueUserWorkItem使用案例详解 这篇文章介绍了C#中的线程池,及其使用方式之一:QueueUserWorkItem方法。接下来,我会更详细地讲解这篇文章的重点内容,以及为何可以使用它来实现线程池。 什么是线程池? 在线程池中,管理器维护多个已经创建的线程,使每个线程可以被重复利用,从而达到节省线程创建时间的目的,提…

    C# 2023年6月6日
    00
  • C#调用Win32的API函数–User32.dll

    下面我来详细讲解“C#调用Win32的API函数–User32.dll”的完整攻略。 什么是Win32 API Win32 API(Application Programming Interface),也叫Windows API,是Windows操作系统提供的一系列核心函数和接口,用于与操作系统打交道,访问系统资源、控制窗口和菜单等。Win32 API以动…

    C# 2023年6月7日
    00
合作推广
合作推广
分享本页
返回顶部