C#实现无损压缩图片的示例详解

作者:芝麻粒儿 时间:2023-04-29 21:07:26 

实践过程

效果

C#实现无损压缩图片的示例详解

代码

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

FileSystemInfo[] fsi = null;
   string ImgPath = "";
   ArrayList al = new ArrayList();
   string ImgSavePath = "";
   string strSourcePath = "";
   Thread td;
   Image ig = null;
   string strSavePath = "";

private void Form1_Load(object sender, EventArgs e)
   {
       CheckForIllegalCrossThreadCalls = false;
   }

/// <summary>
   /// 无损图片缩放
   /// </summary>
   /// <param name="sFile">图片的原始路径</param>
   /// <param name="dFile">缩放后图片的保存路径</param>
   /// <param name="dHeight">缩放后图片的高度</param>
   /// <param name="dWidth">缩放后图片的宽度</param>
   /// <returns></returns>
   public static bool GetPicThumbnail(string sFile, string dFile, int dHeight, int dWidth)
   {
       Image iSource = Image.FromFile(sFile);
       ImageFormat tFormat = iSource.RawFormat;
       int sW = 0, sH = 0;
       // 按比例缩放
       Size tem_size = new Size(iSource.Width, iSource.Height);
       if (tem_size.Height > dHeight || tem_size.Width > dWidth)
       {
           if ((tem_size.Width * dHeight) > (tem_size.Height * dWidth))
           {
               sW = dWidth;
               sH = (dWidth * tem_size.Height) / tem_size.Width;
           }
           else
           {
               sH = dHeight;
               sW = (tem_size.Width * dHeight) / tem_size.Height;
           }
       }
       else
       {
           sW = tem_size.Width;
           sH = tem_size.Height;
       }

Bitmap oB = new Bitmap(dWidth, dHeight);
       Graphics g = Graphics.FromImage(oB);
       g.Clear(Color.WhiteSmoke);
       // 设置画布的描绘质量
       g.CompositingQuality = CompositingQuality.HighQuality;
       g.SmoothingMode = SmoothingMode.HighQuality;
       g.InterpolationMode = InterpolationMode.HighQualityBicubic;
       g.DrawImage(iSource, new Rectangle((dWidth - sW) / 2, (dHeight - sH) / 2, sW, sH), 0, 0, iSource.Width, iSource.Height, GraphicsUnit.Pixel);
       g.Dispose();
       // 以下代码为保存图片时,设置压缩质量
       EncoderParameters eP = new EncoderParameters();
       long[] qy = new long[1];
       qy[0] = 100;
       EncoderParameter eParam = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, qy);
       eP.Param[0] = eParam;
       try
       {
           //获得包含有关内置图像编码解码器的信息的ImageCodecInfo对象。
           ImageCodecInfo[] arrayICI = ImageCodecInfo.GetImageEncoders();
           ImageCodecInfo jpegICIinfo = null;
           for (int x = 0; x < arrayICI.Length; x++)
           {
               if (arrayICI[x].FormatDescription.Equals("JPEG"))
               {
                   jpegICIinfo = arrayICI[x]; //设置JPEG编码
                   break;
               }
           }

if (jpegICIinfo != null)
           {
               oB.Save(dFile, jpegICIinfo, eP);
           }
           else
           {
               oB.Save(dFile, tFormat);
           }

return true;
       }
       catch
       {
           return false;
       }
       finally
       {
           iSource.Dispose();
           oB.Dispose();
       }
   }

private void pictureBox1_Click(object sender, EventArgs e)
   {
       if (folderBrowserDialog1.ShowDialog() == DialogResult.OK)
       {
           fsi = null;
           al.Clear();
           txtPicPath.Text = folderBrowserDialog1.SelectedPath;
           ImgPath = txtPicPath.Text.Trim();
           DirectoryInfo di = new DirectoryInfo(txtPicPath.Text);
           fsi = di.GetFileSystemInfos();
           for (int i = 0; i < fsi.Length; i++)
           {
               string ofile = fsi[i].ToString();
               string fileType = ofile.Substring(ofile.LastIndexOf(".") + 1, ofile.Length - ofile.LastIndexOf(".") - 1);
               fileType = fileType.ToLower();
               if (fileType == "jpeg" || fileType == "jpg" || fileType == "bmp" || fileType == "png")
               {
                   al.Add(ofile);
               }
           }

lblPicNum.Text = al.Count.ToString();
       }
   }

private void pictureBox2_Click(object sender, EventArgs e)
   {
       if (folderBrowserDialog2.ShowDialog() == DialogResult.OK)
       {
           txtSavePath.Text = folderBrowserDialog2.SelectedPath;
           ImgSavePath = txtSavePath.Text.Trim();
       }
   }

private void button2_Click(object sender, EventArgs e)
   {
       Application.Exit();
   }

private void rbPercent_Enter(object sender, EventArgs e)
   {
       groupBox1.Focus();
   }

private void rbResolving_Enter(object sender, EventArgs e)
   {
       groupBox1.Focus();
   }

private void CompleteIMG()
   {
       progressBar1.Maximum = al.Count;
       progressBar1.Minimum = 1;
       if (ImgPath.Length == 3)
           strSourcePath = ImgPath;
       else
           strSourcePath = ImgPath + "\\";

if (ImgSavePath.Length == 3)
           strSavePath = ImgSavePath;
       else
           strSavePath = ImgSavePath + "\\";
       for (int i = 0; i < al.Count; i++)
       {
           ig = Image.FromFile(strSourcePath + al[i].ToString());
           if (rbPercent.Checked)
           {
               GetPicThumbnail(strSourcePath + al[i].ToString(), strSavePath + al[i].ToString(), Convert.ToInt32(ig.Width * (numericUpDown1.Value / 100)),
                   Convert.ToInt32(ig.Height * (numericUpDown1.Value / 100)));
           }

ig.Dispose();
           progressBar1.Value = i + 1;
           lblComplete.Text = Convert.ToString(i + 1);
       }

if (lblComplete.Text == al.Count.ToString())
       {
           MessageBox.Show("压缩成功", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
           progressBar1.Value = 1;
           pictureBox1.Enabled = true;
           pictureBox2.Enabled = true;
           rbPercent.Enabled = true;
           lblPicNum.Text = "0";
           lblComplete.Text = "0";
       }
   }

private void button1_Click(object sender, EventArgs e)
   {
       if (txtPicPath.Text.Trim() != "" && txtSavePath.Text.Trim() != "" && lblPicNum.Text != "0")
       {
           pictureBox1.Enabled = false;
           pictureBox2.Enabled = false;
           rbPercent.Enabled = false;
           td = new Thread(new ThreadStart(this.CompleteIMG));
           td.Start();
       }
       else
       {
           if (txtPicPath.Text.Trim() == "" && txtSavePath.Text.Trim() == "")
           {
               MessageBox.Show("警告:请选择待处理的图片目录及保存位置", "警告", MessageBoxButtons.OK, MessageBoxIcon.Error);
           }
           else
           {
               if (txtPicPath.Text.Trim() == "")
                   MessageBox.Show("警告:请选择待处理的图片", "警告", MessageBoxButtons.OK, MessageBoxIcon.Error);
               if (txtSavePath.Text.Trim() == "")
                   MessageBox.Show("警告:请选择保存路径", "警告", MessageBoxButtons.OK, MessageBoxIcon.Error);
           }
       }
   }

private void Form1_FormClosed(object sender, FormClosedEventArgs e)
   {
       if (td != null)
       {
           td.Abort();
       }
   }
}
partial class Form1
   {
       /// <summary>
       /// 必需的设计器变量。
       /// </summary>
       private System.ComponentModel.IContainer components = null;

/// <summary>
       /// 清理所有正在使用的资源。
       /// </summary>
       /// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param>
       protected override void Dispose(bool disposing)
       {
           if (disposing && (components != null))
           {
               components.Dispose();
           }
           base.Dispose(disposing);
       }

#region Windows 窗体设计器生成的代码

/// <summary>
       /// 设计器支持所需的方法 - 不要
       /// 使用代码编辑器修改此方法的内容。
       /// </summary>
       private void InitializeComponent()
       {
           this.groupBox1 = new System.Windows.Forms.GroupBox();
           this.panel2 = new System.Windows.Forms.Panel();
           this.pictureBox2 = new System.Windows.Forms.PictureBox();
           this.txtSavePath = new System.Windows.Forms.TextBox();
           this.panel1 = new System.Windows.Forms.Panel();
           this.pictureBox1 = new System.Windows.Forms.PictureBox();
           this.txtPicPath = new System.Windows.Forms.TextBox();
           this.label2 = new System.Windows.Forms.Label();
           this.label1 = new System.Windows.Forms.Label();
           this.groupBox2 = new System.Windows.Forms.GroupBox();
           this.numericUpDown1 = new System.Windows.Forms.NumericUpDown();
           this.label4 = new System.Windows.Forms.Label();
           this.label3 = new System.Windows.Forms.Label();
           this.rbPercent = new System.Windows.Forms.RadioButton();
           this.groupBox3 = new System.Windows.Forms.GroupBox();
           this.progressBar1 = new System.Windows.Forms.ProgressBar();
           this.label13 = new System.Windows.Forms.Label();
           this.lblComplete = new System.Windows.Forms.Label();
           this.lblPicNum = new System.Windows.Forms.Label();
           this.label8 = new System.Windows.Forms.Label();
           this.label7 = new System.Windows.Forms.Label();
           this.button1 = new System.Windows.Forms.Button();
           this.button2 = new System.Windows.Forms.Button();
           this.folderBrowserDialog1 = new System.Windows.Forms.FolderBrowserDialog();
           this.folderBrowserDialog2 = new System.Windows.Forms.FolderBrowserDialog();
           this.groupBox1.SuspendLayout();
           this.panel2.SuspendLayout();
           ((System.ComponentModel.ISupportInitialize)(this.pictureBox2)).BeginInit();
           this.panel1.SuspendLayout();
           ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();
           this.groupBox2.SuspendLayout();
           ((System.ComponentModel.ISupportInitialize)(this.numericUpDown1)).BeginInit();
           this.groupBox3.SuspendLayout();
           this.SuspendLayout();
           //
           // groupBox1
           //
           this.groupBox1.Controls.Add(this.panel2);
           this.groupBox1.Controls.Add(this.panel1);
           this.groupBox1.Controls.Add(this.label2);
           this.groupBox1.Controls.Add(this.label1);
           this.groupBox1.Location = new System.Drawing.Point(3, 1);
           this.groupBox1.Name = "groupBox1";
           this.groupBox1.Size = new System.Drawing.Size(458, 81);
           this.groupBox1.TabIndex = 0;
           this.groupBox1.TabStop = false;
           this.groupBox1.Text = "常规";
           //
           // panel2
           //
           this.panel2.BackColor = System.Drawing.Color.White;
           this.panel2.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
           this.panel2.Controls.Add(this.pictureBox2);
           this.panel2.Controls.Add(this.txtSavePath);
           this.panel2.Location = new System.Drawing.Point(130, 53);
           this.panel2.Name = "panel2";
           this.panel2.Size = new System.Drawing.Size(322, 21);
           this.panel2.TabIndex = 5;
           //
           // pictureBox2
           //
           this.pictureBox2.Cursor = System.Windows.Forms.Cursors.PanSE;
           this.pictureBox2.Image = global::CompressImg.Properties.Resources.文件夹打开;
           this.pictureBox2.Location = new System.Drawing.Point(300, 0);
           this.pictureBox2.Name = "pictureBox2";
           this.pictureBox2.Size = new System.Drawing.Size(19, 18);
           this.pictureBox2.TabIndex = 8;
           this.pictureBox2.TabStop = false;
           this.pictureBox2.Click += new System.EventHandler(this.pictureBox2_Click);
           //
           // txtSavePath
           //
           this.txtSavePath.BackColor = System.Drawing.Color.White;
           this.txtSavePath.BorderStyle = System.Windows.Forms.BorderStyle.None;
           this.txtSavePath.Location = new System.Drawing.Point(0, 1);
           this.txtSavePath.Name = "txtSavePath";
           this.txtSavePath.ReadOnly = true;
           this.txtSavePath.Size = new System.Drawing.Size(302, 14);
           this.txtSavePath.TabIndex = 1;
           //
           // panel1
           //
           this.panel1.BackColor = System.Drawing.Color.White;
           this.panel1.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
           this.panel1.Controls.Add(this.pictureBox1);
           this.panel1.Controls.Add(this.txtPicPath);
           this.panel1.Location = new System.Drawing.Point(130, 23);
           this.panel1.Name = "panel1";
           this.panel1.Size = new System.Drawing.Size(322, 21);
           this.panel1.TabIndex = 4;
           //
           // pictureBox1
           //
           this.pictureBox1.Cursor = System.Windows.Forms.Cursors.PanSE;
           this.pictureBox1.Image = global::CompressImg.Properties.Resources.文件夹打开;
           this.pictureBox1.Location = new System.Drawing.Point(300, 0);
           this.pictureBox1.Name = "pictureBox1";
           this.pictureBox1.Size = new System.Drawing.Size(19, 18);
           this.pictureBox1.TabIndex = 8;
           this.pictureBox1.TabStop = false;
           this.pictureBox1.Click += new System.EventHandler(this.pictureBox1_Click);
           //
           // txtPicPath
           //
           this.txtPicPath.BackColor = System.Drawing.Color.White;
           this.txtPicPath.BorderStyle = System.Windows.Forms.BorderStyle.None;
           this.txtPicPath.Location = new System.Drawing.Point(0, 1);
           this.txtPicPath.Name = "txtPicPath";
           this.txtPicPath.ReadOnly = true;
           this.txtPicPath.Size = new System.Drawing.Size(302, 14);
           this.txtPicPath.TabIndex = 1;
           //
           // label2
           //
           this.label2.AutoSize = true;
           this.label2.Location = new System.Drawing.Point(7, 57);
           this.label2.Name = "label2";
           this.label2.Size = new System.Drawing.Size(125, 12);
           this.label2.TabIndex = 2;
           this.label2.Text = "处理后的图片保存至:";
           //
           // label1
           //
           this.label1.AutoSize = true;
           this.label1.Location = new System.Drawing.Point(8, 28);
           this.label1.Name = "label1";
           this.label1.Size = new System.Drawing.Size(125, 12);
           this.label1.TabIndex = 0;
           this.label1.Text = "等待处理的图片位置:";
           //
           // groupBox2
           //
           this.groupBox2.Controls.Add(this.numericUpDown1);
           this.groupBox2.Controls.Add(this.label4);
           this.groupBox2.Controls.Add(this.label3);
           this.groupBox2.Controls.Add(this.rbPercent);
           this.groupBox2.Location = new System.Drawing.Point(3, 86);
           this.groupBox2.Name = "groupBox2";
           this.groupBox2.Size = new System.Drawing.Size(458, 47);
           this.groupBox2.TabIndex = 1;
           this.groupBox2.TabStop = false;
           this.groupBox2.Text = "改变大小";
           //
           // numericUpDown1
           //
           this.numericUpDown1.Location = new System.Drawing.Point(188, 17);
           this.numericUpDown1.Maximum = new decimal(new int[] {
           200,
           0,
           0,
           0});
           this.numericUpDown1.Minimum = new decimal(new int[] {
           1,
           0,
           0,
           0});
           this.numericUpDown1.Name = "numericUpDown1";
           this.numericUpDown1.Size = new System.Drawing.Size(40, 21);
           this.numericUpDown1.TabIndex = 8;
           this.numericUpDown1.Value = new decimal(new int[] {
           50,
           0,
           0,
           0});
           //
           // label4
           //
           this.label4.AutoSize = true;
           this.label4.Location = new System.Drawing.Point(234, 22);
           this.label4.Name = "label4";
           this.label4.Size = new System.Drawing.Size(11, 12);
           this.label4.TabIndex = 4;
           this.label4.Text = "%";
           //
           // label3
           //
           this.label3.AutoSize = true;
           this.label3.Location = new System.Drawing.Point(92, 22);
           this.label3.Name = "label3";
           this.label3.Size = new System.Drawing.Size(89, 12);
           this.label3.TabIndex = 2;
           this.label3.Text = "改成原图大小的";
           //
           // rbPercent
           //
           this.rbPercent.AutoSize = true;
           this.rbPercent.Checked = true;
           this.rbPercent.Location = new System.Drawing.Point(10, 20);
           this.rbPercent.Name = "rbPercent";
           this.rbPercent.Size = new System.Drawing.Size(71, 16);
           this.rbPercent.TabIndex = 0;
           this.rbPercent.TabStop = true;
           this.rbPercent.Text = "按百分比";
           this.rbPercent.UseVisualStyleBackColor = true;
           this.rbPercent.Enter += new System.EventHandler(this.rbPercent_Enter);
           //
           // groupBox3
           //
           this.groupBox3.Controls.Add(this.progressBar1);
           this.groupBox3.Controls.Add(this.label13);
           this.groupBox3.Controls.Add(this.lblComplete);
           this.groupBox3.Controls.Add(this.lblPicNum);
           this.groupBox3.Controls.Add(this.label8);
           this.groupBox3.Controls.Add(this.label7);
           this.groupBox3.Location = new System.Drawing.Point(3, 139);
           this.groupBox3.Name = "groupBox3";
           this.groupBox3.Size = new System.Drawing.Size(458, 85);
           this.groupBox3.TabIndex = 9;
           this.groupBox3.TabStop = false;
           this.groupBox3.Text = "操作显示";
           //
           // progressBar1
           //
           this.progressBar1.Location = new System.Drawing.Point(107, 54);
           this.progressBar1.Name = "progressBar1";
           this.progressBar1.Size = new System.Drawing.Size(302, 18);
           this.progressBar1.Step = 1;
           this.progressBar1.TabIndex = 16;
           //
           // label13
           //
           this.label13.AutoSize = true;
           this.label13.Location = new System.Drawing.Point(42, 57);
           this.label13.Name = "label13";
           this.label13.Size = new System.Drawing.Size(53, 12);
           this.label13.TabIndex = 15;
           this.label13.Text = "处理进度";
           //
           // lblComplete
           //
           this.lblComplete.AutoSize = true;
           this.lblComplete.Location = new System.Drawing.Point(339, 25);
           this.lblComplete.Name = "lblComplete";
           this.lblComplete.Size = new System.Drawing.Size(11, 12);
           this.lblComplete.TabIndex = 12;
           this.lblComplete.Text = "0";
           //
           // lblPicNum
           //
           this.lblPicNum.AutoSize = true;
           this.lblPicNum.Location = new System.Drawing.Point(149, 26);
           this.lblPicNum.Name = "lblPicNum";
           this.lblPicNum.Size = new System.Drawing.Size(11, 12);
           this.lblPicNum.TabIndex = 11;
           this.lblPicNum.Text = "0";
           //
           // label8
           //
           this.label8.AutoSize = true;
           this.label8.Location = new System.Drawing.Point(255, 26);
           this.label8.Name = "label8";
           this.label8.Size = new System.Drawing.Size(77, 12);
           this.label8.TabIndex = 10;
           this.label8.Text = "已经处理成功";
           //
           // label7
           //
           this.label7.AutoSize = true;
           this.label7.Location = new System.Drawing.Point(42, 26);
           this.label7.Name = "label7";
           this.label7.Size = new System.Drawing.Size(101, 12);
           this.label7.TabIndex = 9;
           this.label7.Text = "待处理的图片共有";
           //
           // button1
           //
           this.button1.Location = new System.Drawing.Point(305, 230);
           this.button1.Name = "button1";
           this.button1.Size = new System.Drawing.Size(75, 23);
           this.button1.TabIndex = 10;
           this.button1.Text = "开始压缩";
           this.button1.UseVisualStyleBackColor = true;
           this.button1.Click += new System.EventHandler(this.button1_Click);
           //
           // button2
           //
           this.button2.Location = new System.Drawing.Point(386, 230);
           this.button2.Name = "button2";
           this.button2.Size = new System.Drawing.Size(75, 23);
           this.button2.TabIndex = 11;
           this.button2.Text = "取消";
           this.button2.UseVisualStyleBackColor = true;
           this.button2.Click += new System.EventHandler(this.button2_Click);
           //
           // Form1
           //
           this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
           this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
           this.ClientSize = new System.Drawing.Size(463, 261);
           this.Controls.Add(this.button2);
           this.Controls.Add(this.button1);
           this.Controls.Add(this.groupBox3);
           this.Controls.Add(this.groupBox2);
           this.Controls.Add(this.groupBox1);
           this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
           this.MaximizeBox = false;
           this.MinimizeBox = false;
           this.Name = "Form1";
           this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
           this.Text = "无损压缩图片";
           this.Load += new System.EventHandler(this.Form1_Load);
           this.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.Form1_FormClosed);
           this.groupBox1.ResumeLayout(false);
           this.groupBox1.PerformLayout();
           this.panel2.ResumeLayout(false);
           this.panel2.PerformLayout();
           ((System.ComponentModel.ISupportInitialize)(this.pictureBox2)).EndInit();
           this.panel1.ResumeLayout(false);
           this.panel1.PerformLayout();
           ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();
           this.groupBox2.ResumeLayout(false);
           this.groupBox2.PerformLayout();
           ((System.ComponentModel.ISupportInitialize)(this.numericUpDown1)).EndInit();
           this.groupBox3.ResumeLayout(false);
           this.groupBox3.PerformLayout();
           this.ResumeLayout(false);

}

#endregion

private System.Windows.Forms.GroupBox groupBox1;
       private System.Windows.Forms.TextBox txtPicPath;
       private System.Windows.Forms.Label label1;
       private System.Windows.Forms.Label label2;
       private System.Windows.Forms.GroupBox groupBox2;
       private System.Windows.Forms.Label label4;
       private System.Windows.Forms.Label label3;
       private System.Windows.Forms.RadioButton rbPercent;
       private System.Windows.Forms.GroupBox groupBox3;
       private System.Windows.Forms.Label label13;
       private System.Windows.Forms.Label lblComplete;
       private System.Windows.Forms.Label lblPicNum;
       private System.Windows.Forms.Label label8;
       private System.Windows.Forms.Label label7;
       private System.Windows.Forms.Button button1;
       private System.Windows.Forms.Button button2;
       private System.Windows.Forms.Panel panel1;
       private System.Windows.Forms.PictureBox pictureBox1;
       private System.Windows.Forms.Panel panel2;
       private System.Windows.Forms.PictureBox pictureBox2;
       private System.Windows.Forms.TextBox txtSavePath;
       private System.Windows.Forms.ProgressBar progressBar1;
       private System.Windows.Forms.FolderBrowserDialog folderBrowserDialog1;
       private System.Windows.Forms.FolderBrowserDialog folderBrowserDialog2;
       private System.Windows.Forms.NumericUpDown numericUpDown1;
   }

来源:https://blog.csdn.net/qq_27489007/article/details/128123407

标签:C#,无损,压缩,图片
0
投稿

猜你喜欢

  • Android笔记之:App应用之启动界面SplashActivity的使用

    2023-03-21 19:05:56
  • Elasticsearch写入瓶颈导致skywalking大盘空白

    2021-07-07 00:39:42
  • Java并发编程之Fork/Join框架的理解

    2023-09-30 14:14:01
  • WinForm中comboBox控件数据绑定实现方法

    2023-04-23 07:37:28
  • Android编程实现自定义手势的方法详解

    2023-09-14 16:02:36
  • java基础之接口组成更新的实现

    2022-10-03 08:10:27
  • Android列表选择框Spinner使用方法详解

    2023-10-04 13:18:02
  • Java 二分查找算法的实现

    2022-07-23 11:10:13
  • C#使用struct类型作为泛型Dictionary<TKey,TValue>的键

    2023-10-09 01:53:35
  • Java 动态代理深入理解

    2023-04-13 10:54:21
  • 完美解决springboot项目出现”java: 错误: 无效的源发行版:17“问题(图文详解)

    2023-08-29 02:15:32
  • SpringBoot使用AOP记录接口操作日志的方法

    2022-01-19 08:56:47
  • Android实现简单卡片布局

    2023-05-22 11:43:37
  • C#适配器模式的使用

    2022-02-05 15:47:21
  • 解决android 显示内容被底部导航栏遮挡的问题

    2021-08-05 10:10:55
  • 解析C#编程的通用结构和程序书写格式规范

    2022-12-22 03:41:41
  • Android中WebView常见问题及解决方案汇总

    2021-06-26 07:23:02
  • android JSON解析数据 android解析天气预报

    2022-01-16 03:33:53
  • SpringBoot Entity中枚举类型详细使用介绍

    2023-11-11 00:30:52
  • Spring Cloud Gateway 拦截响应问题分析(数据截断问题)

    2022-06-20 07:30:27
  • asp之家 软件编程 m.aspxhome.com