首页 > 编程语言 >C#图片按比例缩放实例

C#图片按比例缩放实例

时间:2023-07-05 15:55:24浏览次数:42  
标签:graphic 缩放 C# image int bmp 实例 Image

下面是关于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方法构建完整的文件路径。每次迭代中,我们都按比例缩放图片,并将缩放后的图片保存到本地。

标签:graphic,缩放,C#,image,int,bmp,实例,Image
From: https://www.cnblogs.com/tyxajh/p/17528762.html

相关文章

  • MedCalc v22.009 医学ROC曲线统计分析软件下载安装教程
    MedCalc是一款医学ROC曲线统计软件,用于ROC曲线分析的参考软件,医学工作者设计的医学计算器,功能齐全。它可以帮助医生快速作出普通的医学计算,从而对症下药。提供超过76种常用的规则和方法,包括:病人数据、单位参数、费用计算等等。甚至可以将图形另存为BMP,PNG,GIF,PCX,JPG或TIF文件,或......
  • cellos.20221115_030623类似的目录撑爆存储节点的root文件系统
    1、某Exadata客户,其中一个存储节点的根文件系统使用率超过90%,使用如下命令检查是哪些目录占用空间#du-sm*|sort-rn|head发现是/var/log目录下的东西占用大量空间。2、在/var/log目录下,存在大量cellos开头,但以日期结果的目录,这些目录占用大量磁盘空间。如下所示:drwxr-----7......
  • 美团特供IDEA入门实战笔记CSDN显踪,竟无良程序员白嫖后举报下架
    今天给大家带来的是:黄文毅,罗军老师著的 《IntelliJIDEA入门与实战》 黄文毅,罗军是谁?黄文毅,CSDN博客专家,架构师。先后就职于厦门星耀蓝图、厦门美图、上海美团等公司。主要从事Java开发工作,具有丰富的软件开发经验,熟悉Java、高并发、分布式及相关的软件架构。出版《分布式......
  • Sentieon | 每周文献-Agrigenomics-第四期
    农业系列文章-1标题(英文):Genomicfootprintsofsorghumdomesticationandbreedingselectionformultipleenduses标题(中文):高粱驯化的基因组足迹和多种最终用途的育种选择发表期刊:《MolecularPlant》作者单位:中国科学院植物研究所植物资源重点实验室等发表......
  • 【HMS Core】接入华为帐号,获取访问令牌失败,提示错误码20022
    ​【问题描述】通过AppAuth接入华为帐号,调用https://oauth-login.cloud.huawei.com/oauth2/v3/token接口时返回错误,"sub_error":20022,"error_description":“invalidredirect_uri”,"error":1101​ 【问题分析】根据官网接口错误码描述,是由于redirect_uri格式校验不......
  • celery安装和使用
    安装pipinstallcelery简单使用安装完celery后,会生成一个可执行文件:celery,与pip命令在一个目录下,也就是scripts下。注意:celery官方不支持在windows上启动,如果确需要在windows上启动服务,需要使用一个第三方模块:eventlet支持pipinstalleventlet启动命令4.x之前版本Linux......
  • VUE 2项目使用vue-json-excel导出数据
    记录一下后端返回的json数据转成excel导出这里外面使用的是vue-json-excel1.安装包npminstallvue-json-excel2.组件中使用<download-excelclass="btnbtn-default":data="json_data":fields="json_fields"worksheet="MyWorksheet"name=&......
  • archery 中analysis_slow_query.sh
    pt_query_digest安装mv pt-query-digest   /usr/bin/chmod +x  /usr/bin/pt-query-digestyum -y install perl-Digest-MD5yum -y install perl-DBI perl-DBD-MySQL  analysis_slow_query.sh:#!/bin/bashDIR="$(cd"$(dirname"$0")"&......
  • Element-plus按需导入报错:Error: Cannot find module 'node:module'
    1.问题vue3项目使用ElementPlus组件库,配置按需导入:首先安装unplugin-vue-components和unplugin-auto-import这两款插件npminstall-Dunplugin-vue-componentsunplugin-auto-import然后按照文档在配置文件中进行相关配置;因为更改了配置文件,所以得重新启动项目--......
  • JAVA 调试高内存占用与CPU满载异常场景
    高内存占用,堆溢出,OOM代码: @RequestMapping(value="/oom",method={RequestMethod.GET}) publicResultBasegetMessage2()throwsInterruptedException{ List<String>strList=Lists.newArrayList(); for(inti=0;i<10240;i++){ strLi......