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日

相关文章

  • Entity Framework导航属性介绍

    Entity Framework导航属性介绍 什么是导航属性 在EF中,导航属性是描述两个实体之间关系的属性。例如,一个订单实体和一个客户实体之间的关系就可以通过导航属性进行描述。 如何使用导航属性 导航属性有两种方式进行访问:延迟加载和显示加载,下面我将对这两种方式进行详细的说明。 延迟加载 代码示例: using(var context = new My…

    C# 2023年6月3日
    00
  • C# Linq的Union()方法 – 返回两个序列的并集

    C# Linq的Union()操作符 Union() 是 C# Linq 提供的操作符之一,它可以将两个集合合并为一个集合,并且去除重复的元素。它的语法如下: IEnumerable<TSource> Union<TSource>( this IEnumerable<TSource> first, IEnumerable&…

    C# 2023年4月19日
    00
  • VS2019 找不到资产文件 “xxxx\obj\project.assets.json”运行NuGet包还原以生成此文件(解决方案)

    当使用Visual Studio 2019进行NuGet包安装和构建代码时,你可能会遇到找不到项目资产文件的错误。此时,可以通过运行NuGet包还原来重新生成项目资产文件以解决问题。 以下是完整的攻略步骤: 步骤1: 在Visual Studio 2019中打开你的解决方案。展开“解决方案资源管理器”中的项目节点,找到包含“xxxx\obj\project.…

    C# 2023年5月15日
    00
  • 通用的CRUD之LiteDB

    前言 你要开发一个系统,是不是首要任务是先建库,建表,建字段,既所谓的数据建模(听起来高大上一点,数据建模也确实是个烧脑的活),要费不少功夫。不知你是否遇到过这样的场景。A产品有3个测试参数,B产品有6个测试参数,而且值和类型都各不相同,用SQL你要怎么建表呢?有人会说这简单“参数名,参数值两列搞定”,NO!数据类型考虑了吗,数据量考虑了吗?有人又说”每个参…

    C# 2023年5月10日
    00
  • C#实现在网页中根据url截图并输出到网页的方法

    下面就来详细讲解如何使用C#实现在网页中根据URL截图并输出到网页的方法。 步骤一:安装NuGet包 首先,我们需要在Visual Studio中安装一个名为“Selenium.WebDriver”的NuGet包。这个包提供了许多操作浏览器窗口的功能,可以用来实现我们的目标。 步骤二:编写代码 接下来,我们需要编写代码来实现在网页中根据URL截图并输出到网页…

    C# 2023年6月7日
    00
  • .NET core项目AsyncLocal在链路追踪中的应用

    .NET Core 项目 AsyncLocal 在链路追踪中的应用 在 .NET Core 项目中,AsyncLocal 是一个非常有用的工具,它可以帮助我们在异步调用链路中传递上下文信息。本攻略将详细介绍如何在 .NET Core 项目中使用 AsyncLocal 实现链路追踪。 AsyncLocal 的作用 在 .NET Core 项目中,AsyncLo…

    C# 2023年5月16日
    00
  • unity使用socket编程实现聊天室功能

    关于“unity使用socket编程实现聊天室功能”的完整攻略,可以分为以下几个步骤: 1.设置Unity环境 首先,我们需要在Unity中设置网络权限。在Unity的Player Settings中,选择Android或iOS平台,在设置面板的Other Settings中找到Configuration->Internet Access,并将其设置为…

    C# 2023年6月3日
    00
  • 适用与firefox ASP.NET无刷新二级联动下拉列表

    下面是“适用于 Firefox ASP.NET 无刷新二级联动下拉列表”的完整攻略。 介绍 在ASP.NET网站开发过程中,常常需要实现下拉列表的二级联动,即根据第一个下拉选项的选择,动态加载第二个下拉选项的内容。而且为了用户体验,需要使用无刷新技术,即在不刷新整个页面的情况下,实现二级下拉列表的动态更新。 本文将介绍如何实现这个功能,并针对火狐(Firef…

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