当前位置: 首页 > news >正文

图片编辑类

None.gif using  System;
None.gif
using  System.Drawing;
None.gif
using  System.IO;
None.gif
ExpandedBlockStart.gif
/// <summary>
InBlock.gif
/// ImgEdit 的摘要说明
ExpandedBlockEnd.gif
/// </summary>

None.gif public   class  ImgEdit
ExpandedBlockStart.gif
{
InBlock.gif    
public ImgEdit()
ExpandedSubBlockStart.gif    
{
InBlock.gif        
//
InBlock.gif        
// TODO: 在此处添加构造函数逻辑
InBlock.gif        
//
ExpandedSubBlockEnd.gif
    }
InBlock.gif
ExpandedSubBlockStart.gif    
/// <summary>
InBlock.gif    
/// 图片水印
InBlock.gif    
/// </summary>
InBlock.gif    
/// <param name="ImgFile">原图文件地址</param>
InBlock.gif    
/// <param name="WaterImg">水印图片地址</param>
InBlock.gif    
/// <param name="sImgPath">水印图片保存地址</param>
InBlock.gif    
/// <param name="Alpha">水印透明度设置</param>
InBlock.gif    
/// <param name="iScale">水印图片在原图上的显示比例(水平)</param>
ExpandedSubBlockEnd.gif    
/// <param name="intDistance">水印图片在原图上的边距确定,以图片的右边和下边为准,当设定的边距超过一定大小后参数会自动失效</param>
InBlock.gif    public bool ImgWater(string ImgFile, string WaterImg, string sImgPath, float Alpha, float iScale, int intDistance)
ExpandedSubBlockStart.gif    
{
InBlock.gif        
try
ExpandedSubBlockStart.gif        
{
InBlock.gif            
//装载图片
InBlock.gif
            FileStream fs = new FileStream(ImgFile, FileMode.Open);
InBlock.gif            BinaryReader br 
= new BinaryReader(fs);
InBlock.gif            
byte[] bytes = br.ReadBytes((int)fs.Length);
InBlock.gif            br.Close();
InBlock.gif            fs.Close();
InBlock.gif            MemoryStream ms 
= new MemoryStream(bytes);
InBlock.gif
InBlock.gif            System.Drawing.Image imgPhoto 
= System.Drawing.Image.FromStream(ms);
InBlock.gif            
int imgPhotoWidth = imgPhoto.Width;
InBlock.gif            
int imgPhotoHeight = imgPhoto.Height;
InBlock.gif
InBlock.gif            System.Drawing.Image imgWatermark 
= new Bitmap(WaterImg);
InBlock.gif            
int imgWatermarkWidth = imgWatermark.Width;
InBlock.gif            
int imgWatermarkHeight = imgWatermark.Height;
InBlock.gif
InBlock.gif
InBlock.gif            
//计算水印图片尺寸
InBlock.gif
            decimal aScale = Convert.ToDecimal(iScale);
InBlock.gif            
decimal pScale = 0.05M;
InBlock.gif            
decimal MinScale = aScale - pScale;
InBlock.gif            
decimal MaxScale = aScale + pScale;
InBlock.gif
InBlock.gif            
//设置比例
InBlock.gif
            int imgWatermarkWidthNew = Convert.ToInt32(imgPhotoWidth * aScale);
InBlock.gif            
int imgWatermarkHeightNew = Convert.ToInt32((imgPhotoWidth * aScale / imgWatermarkWidth) * imgWatermarkHeight);
InBlock.gif
InBlock.gif
InBlock.gif            
//将原图画出来
InBlock.gif
            Bitmap bmPhoto = new Bitmap(imgPhotoWidth, imgPhotoHeight, System.Drawing.Imaging.PixelFormat.Format24bppRgb);
InBlock.gif            bmPhoto.SetResolution(
7272);
InBlock.gif            Graphics gbmPhoto 
= Graphics.FromImage(bmPhoto);
InBlock.gif
InBlock.gif            gbmPhoto.InterpolationMode 
= System.Drawing.Drawing2D.InterpolationMode.High;
InBlock.gif            gbmPhoto.SmoothingMode 
= System.Drawing.Drawing2D.SmoothingMode.HighQuality;
InBlock.gif            gbmPhoto.Clear(Color.White);
InBlock.gif            gbmPhoto.DrawImage(imgPhoto, 
new Rectangle(00, imgPhotoWidth, imgPhotoHeight), 00, imgPhotoWidth, imgPhotoHeight, GraphicsUnit.Pixel);
InBlock.gif
InBlock.gif            Bitmap bmWatermark 
= new Bitmap(bmPhoto);
InBlock.gif            bmWatermark.SetResolution(imgPhoto.HorizontalResolution, imgPhoto.VerticalResolution);
InBlock.gif
InBlock.gif            Graphics gWatermark 
= Graphics.FromImage(bmWatermark);
InBlock.gif
InBlock.gif            
//指定高质量显示水印图片质量
InBlock.gif
            gWatermark.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;
InBlock.gif            gWatermark.SmoothingMode 
= System.Drawing.Drawing2D.SmoothingMode.HighQuality;
InBlock.gif            System.Drawing.Imaging.ImageAttributes imageAttributes 
= new System.Drawing.Imaging.ImageAttributes();
InBlock.gif
InBlock.gif            
//设置两种颜色,达到合成效果
InBlock.gif
            System.Drawing.Imaging.ColorMap colorMap = new System.Drawing.Imaging.ColorMap();
InBlock.gif            colorMap.OldColor 
= Color.FromArgb(25502550);
InBlock.gif            colorMap.NewColor 
= Color.FromArgb(0000);
InBlock.gif
ExpandedSubBlockStart.gif            System.Drawing.Imaging.ColorMap[] remapTable 
= { colorMap };
InBlock.gif
InBlock.gif            imageAttributes.SetRemapTable(remapTable, System.Drawing.Imaging.ColorAdjustType.Bitmap);
InBlock.gif
InBlock.gif            
//用矩阵设置水印图片透明度
ExpandedSubBlockStart.gif
            float[][] colorMatrixElements = 
ExpandedSubBlockStart.gif               
new float[] {1.0f,  0.0f,  0.0f,  0.0f0.0f},
ExpandedSubBlockStart.gif               
new float[] {0.0f,  1.0f,  0.0f,  0.0f0.0f},
ExpandedSubBlockStart.gif               
new float[] {0.0f,  0.0f,  1.0f,  0.0f0.0f},
ExpandedSubBlockStart.gif               
new float[] {0.0f,  0.0f,  0.0f,  Alpha, 0.0f},
ExpandedSubBlockStart.gif               
new float[] {0.0f,  0.0f,  0.0f,  0.0f1.0f}
ExpandedSubBlockEnd.gif            }
;
InBlock.gif
InBlock.gif            System.Drawing.Imaging.ColorMatrix wmColorMatrix 
= new System.Drawing.Imaging.ColorMatrix(colorMatrixElements);
InBlock.gif            imageAttributes.SetColorMatrix(wmColorMatrix, System.Drawing.Imaging.ColorMatrixFlag.Default, System.Drawing.Imaging.ColorAdjustType.Bitmap);
InBlock.gif
InBlock.gif            
//确定水印边距
InBlock.gif
            int xPos = imgPhotoWidth - imgWatermarkWidthNew;
InBlock.gif            
int yPos = imgPhotoHeight - imgWatermarkHeightNew;
InBlock.gif            
int xPosOfWm = 0;
InBlock.gif            
int yPosOfWm = 0;
InBlock.gif
InBlock.gif            
if (xPos > intDistance)
InBlock.gif                xPosOfWm 
= xPos - intDistance;
InBlock.gif            
else
InBlock.gif                xPosOfWm 
= xPos;
InBlock.gif
InBlock.gif            
if (yPos > intDistance)
InBlock.gif                yPosOfWm 
= yPos - intDistance;
InBlock.gif            
else
InBlock.gif                yPosOfWm 
= yPos;
InBlock.gif
InBlock.gif            gWatermark.DrawImage(imgWatermark, 
new Rectangle(xPosOfWm, yPosOfWm, imgWatermarkWidthNew, imgWatermarkHeightNew), 00, imgWatermarkWidth, imgWatermarkHeight, GraphicsUnit.Pixel, imageAttributes);
InBlock.gif
InBlock.gif            imgPhoto 
= bmWatermark;
InBlock.gif
InBlock.gif
InBlock.gif            imgPhoto.Save(sImgPath, System.Drawing.Imaging.ImageFormat.Jpeg);
InBlock.gif
InBlock.gif            
//销毁对象
InBlock.gif
            gbmPhoto.Dispose();
InBlock.gif            gWatermark.Dispose();
InBlock.gif
InBlock.gif            imgPhoto.Dispose();
InBlock.gif            imgWatermark.Dispose();
InBlock.gif
InBlock.gif            
return true;
ExpandedSubBlockEnd.gif        }

InBlock.gif        
catch (Exception ex)
ExpandedSubBlockStart.gif        
{
InBlock.gif            
return false;
ExpandedSubBlockEnd.gif        }

ExpandedSubBlockEnd.gif    }

InBlock.gif
InBlock.gif
InBlock.gif
ExpandedSubBlockStart.gif    
/// <summary>
InBlock.gif    
/// 文字水印
InBlock.gif    
/// </summary>
InBlock.gif    
/// <param name="ImgFile">原图文件地址</param>
InBlock.gif    
/// <param name="TextFont">水印文字</param>
InBlock.gif    
/// <param name="sImgPath">文字水印图片保存地址</param>
InBlock.gif    
/// <param name="Alpha">文字透明度 其数值的范围在0到255</param>
InBlock.gif    
/// <param name="widthFont">文字块在图片中所占宽度比例</param>
ExpandedSubBlockEnd.gif    
/// <param name="hScale">高度位置</param>
InBlock.gif    public bool TextWater(string ImgFile, string TextFont, string sImgPath, int Alpha, float widthFont, float hScale)
ExpandedSubBlockStart.gif    
{
InBlock.gif        
try
ExpandedSubBlockStart.gif        
{
InBlock.gif            FileStream fs 
= new FileStream(ImgFile, FileMode.Open);
InBlock.gif            BinaryReader br 
= new BinaryReader(fs);
InBlock.gif            
byte[] bytes = br.ReadBytes((int)fs.Length);
InBlock.gif            br.Close();
InBlock.gif            fs.Close();
InBlock.gif            MemoryStream ms 
= new MemoryStream(bytes);
InBlock.gif
InBlock.gif            System.Drawing.Image imgPhoto 
= System.Drawing.Image.FromStream(ms);
InBlock.gif            
int imgPhotoWidth = imgPhoto.Width;
InBlock.gif            
int imgPhotoHeight = imgPhoto.Height;
InBlock.gif
InBlock.gif            Bitmap bmPhoto 
= new Bitmap(imgPhotoWidth, imgPhotoHeight, System.Drawing.Imaging.PixelFormat.Format24bppRgb);
InBlock.gif            bmPhoto.SetResolution(
7272);
InBlock.gif            Graphics gbmPhoto 
= Graphics.FromImage(bmPhoto);
InBlock.gif            gbmPhoto.Clear(Color.FromName(
"white"));//gif背景色
InBlock.gif
            gbmPhoto.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;
InBlock.gif            gbmPhoto.SmoothingMode 
= System.Drawing.Drawing2D.SmoothingMode.HighQuality;
InBlock.gif            gbmPhoto.DrawImage(imgPhoto, 
new Rectangle(00, imgPhotoWidth, imgPhotoHeight), 00, imgPhotoWidth, imgPhotoHeight, GraphicsUnit.Pixel);
InBlock.gif
InBlock.gif            
//建立字体大小的数组,循环找出适合图片的水印字体
ExpandedSubBlockStart.gif
            int[] sizes = new int[] 100080070065060056054050045040038036034032030028026024022020018016014012010080726448322826242028161412108642 };
InBlock.gif            System.Drawing.Font crFont 
= null;
InBlock.gif            System.Drawing.SizeF crSize 
= new SizeF();
InBlock.gif            
for (int i = 0; i < 43; i++)
ExpandedSubBlockStart.gif            
{
InBlock.gif                crFont 
= new Font("arial", sizes[i], FontStyle.Bold);
InBlock.gif                crSize 
= gbmPhoto.MeasureString(TextFont, crFont);
InBlock.gif
InBlock.gif                
if ((ushort)crSize.Width < (ushort)imgPhotoWidth * widthFont)
InBlock.gif                    
break;
ExpandedSubBlockEnd.gif            }

InBlock.gif
InBlock.gif            
//设置水印字体的位置
InBlock.gif
            int yPixlesFromBottom = (int)(imgPhotoHeight * hScale);
InBlock.gif            
float yPosFromBottom = ((imgPhotoHeight - yPixlesFromBottom) - (crSize.Height / 2));
InBlock.gif            
float xCenterOfImg = (imgPhotoWidth * 1 / 2);
InBlock.gif
InBlock.gif            System.Drawing.StringFormat StrFormat 
= new System.Drawing.StringFormat();
InBlock.gif            StrFormat.Alignment 
= System.Drawing.StringAlignment.Center;
InBlock.gif
InBlock.gif            
//画两次制造透明效果
InBlock.gif
            System.Drawing.SolidBrush semiTransBrush2 = new System.Drawing.SolidBrush(Color.FromArgb(Alpha, 000));
InBlock.gif            gbmPhoto.DrawString(TextFont, crFont, semiTransBrush2, 
new System.Drawing.PointF(xCenterOfImg + 1, yPosFromBottom + 1), StrFormat);
InBlock.gif
InBlock.gif            System.Drawing.SolidBrush semiTransBrush 
= new System.Drawing.SolidBrush(Color.FromArgb(Alpha, 255255255));
InBlock.gif            gbmPhoto.DrawString(TextFont, crFont, semiTransBrush, 
new System.Drawing.PointF(xCenterOfImg, yPosFromBottom), StrFormat);
InBlock.gif
InBlock.gif            bmPhoto.Save(sImgPath, System.Drawing.Imaging.ImageFormat.Jpeg);
InBlock.gif
InBlock.gif            gbmPhoto.Dispose();
InBlock.gif            imgPhoto.Dispose();
InBlock.gif            bmPhoto.Dispose();
InBlock.gif
InBlock.gif            
return true;
ExpandedSubBlockEnd.gif        }

InBlock.gif        
catch (Exception ex)
ExpandedSubBlockStart.gif        
{
InBlock.gif            
return false;
ExpandedSubBlockEnd.gif        }

ExpandedSubBlockEnd.gif    }

InBlock.gif
InBlock.gif
ExpandedSubBlockStart.gif    
/// <summary>
InBlock.gif    
/// 缩略图
InBlock.gif    
/// </summary>
InBlock.gif    
/// <param name="ImgFile">原图文件地址</param>
InBlock.gif    
/// <param name="sImgPath">缩略图保存地址</param>
InBlock.gif    
/// <param name="ResizeWidth">缩略图宽度</param>
InBlock.gif    
/// <param name="ResizeHeight">缩略图高度</param>
ExpandedSubBlockEnd.gif    
/// <param name="BgColor">缩略图背景颜色,注意,背景颜色只能指定KnownColor中的值,如white,blue,red,green等</param>
InBlock.gif    public bool ResizeImg(string ImgFile, string sImgPath, int ResizeWidth, int ResizeHeight, string BgColor)
ExpandedSubBlockStart.gif    
{
InBlock.gif        
try
ExpandedSubBlockStart.gif        
{
InBlock.gif            FileStream fs 
= new FileStream(ImgFile, FileMode.Open);
InBlock.gif            BinaryReader br 
= new BinaryReader(fs);
InBlock.gif            
byte[] bytes = br.ReadBytes((int)fs.Length);
InBlock.gif            br.Close();
InBlock.gif            fs.Close();
InBlock.gif            MemoryStream ms 
= new MemoryStream(bytes);
InBlock.gif
InBlock.gif            System.Drawing.Image imgPhoto 
= System.Drawing.Image.FromStream(ms);
InBlock.gif            
int imgPhotoWidth = imgPhoto.Width;
InBlock.gif            
int imgPhotoHeight = imgPhoto.Height;
InBlock.gif            
int StartX = 0;
InBlock.gif            
int StartY = 0;
InBlock.gif            
int NewWidth = imgPhotoWidth;
InBlock.gif            
int NewHeight = imgPhotoHeight;
InBlock.gif
InBlock.gif            
//计算缩放图片尺寸
InBlock.gif
            if (NewWidth > ResizeWidth)
ExpandedSubBlockStart.gif            
{
InBlock.gif                NewWidth 
= ResizeWidth;
InBlock.gif                NewHeight 
= Convert.ToInt32(imgPhotoHeight * Math.Round(Convert.ToDecimal(NewWidth) / Convert.ToDecimal(imgPhotoWidth), 10));
ExpandedSubBlockEnd.gif            }

InBlock.gif
InBlock.gif            
if (NewHeight > ResizeHeight)
ExpandedSubBlockStart.gif            
{
InBlock.gif                NewHeight 
= ResizeHeight;
InBlock.gif                NewWidth 
= Convert.ToInt32(imgPhotoWidth * Math.Round(Convert.ToDecimal(NewHeight) / Convert.ToDecimal(imgPhotoHeight), 10));
ExpandedSubBlockEnd.gif            }

InBlock.gif
InBlock.gif            StartX 
= ResizeWidth - NewWidth;
InBlock.gif            StartY 
= ResizeHeight - NewHeight;
InBlock.gif
InBlock.gif            StartX 
= StartX > 0 ? StartX / 2 : 0;
InBlock.gif            StartY 
= StartY > 0 ? StartY / 2 : 0;
InBlock.gif
InBlock.gif            Bitmap bmPhoto 
= new Bitmap(ResizeWidth, ResizeHeight, System.Drawing.Imaging.PixelFormat.Format24bppRgb);
InBlock.gif            bmPhoto.SetResolution(
7272);
InBlock.gif            Graphics gbmPhoto 
= Graphics.FromImage(bmPhoto);
InBlock.gif            gbmPhoto.Clear(Color.FromName(BgColor));
InBlock.gif            gbmPhoto.InterpolationMode 
= System.Drawing.Drawing2D.InterpolationMode.High;
InBlock.gif            gbmPhoto.SmoothingMode 
= System.Drawing.Drawing2D.SmoothingMode.HighQuality;
InBlock.gif
InBlock.gif            gbmPhoto.DrawImage(imgPhoto, 
new Rectangle(StartX, StartY, NewWidth, NewHeight), new Rectangle(00, imgPhotoWidth, imgPhotoHeight), GraphicsUnit.Pixel);
InBlock.gif            bmPhoto.Save(sImgPath, System.Drawing.Imaging.ImageFormat.Jpeg);
InBlock.gif
InBlock.gif            imgPhoto.Dispose();
InBlock.gif            gbmPhoto.Dispose();
InBlock.gif            bmPhoto.Dispose();
InBlock.gif
InBlock.gif            
return true;
ExpandedSubBlockEnd.gif        }

InBlock.gif        
catch (Exception err)
ExpandedSubBlockStart.gif        
{
InBlock.gif            
return false;
ExpandedSubBlockEnd.gif        }

ExpandedSubBlockEnd.gif    }

InBlock.gif
InBlock.gif
ExpandedSubBlockStart.gif    
/// <summary>
InBlock.gif    
/// 图片剪切
InBlock.gif    
/// </summary>
InBlock.gif    
/// <param name="ImgFile">原图文件地址</param>
InBlock.gif    
/// <param name="sImgPath">缩略图保存地址</param>
InBlock.gif    
/// <param name="PointX">剪切起始点 X坐标</param>
InBlock.gif    
/// <param name="PointY">剪切起始点 Y坐标</param>
InBlock.gif    
/// <param name="CutWidth">剪切宽度</param>
ExpandedSubBlockEnd.gif    
/// <param name="CutHeight">剪切高度</param>
InBlock.gif    public bool CutImg(string ImgFile, string sImgPath, int PointX, int PointY, int CutWidth, int CutHeight)
ExpandedSubBlockStart.gif    
{
InBlock.gif        
try
ExpandedSubBlockStart.gif        
{
InBlock.gif            FileStream fs 
= new FileStream(ImgFile, FileMode.Open);
InBlock.gif            BinaryReader br 
= new BinaryReader(fs);
InBlock.gif            
byte[] bytes = br.ReadBytes((int)fs.Length);
InBlock.gif            br.Close();
InBlock.gif            fs.Close();
InBlock.gif            MemoryStream ms 
= new MemoryStream(bytes);
InBlock.gif            System.Drawing.Image imgPhoto 
= System.Drawing.Image.FromStream(ms);
InBlock.gif
InBlock.gif            
//System.Drawing.Image imgPhoto = System.Drawing.Image.FromFile(ImgFile);
InBlock.gif            
//此处只能用filestream,用 System.Drawing.Image则会报多过进程访问文件的错误,会锁定文件
InBlock.gif
            Bitmap bmPhoto = new Bitmap(CutWidth, CutHeight, System.Drawing.Imaging.PixelFormat.Format24bppRgb);
InBlock.gif            bmPhoto.SetResolution(
7272);
InBlock.gif            Graphics gbmPhoto 
= Graphics.FromImage(bmPhoto);
InBlock.gif            gbmPhoto.InterpolationMode 
= System.Drawing.Drawing2D.InterpolationMode.High;
InBlock.gif            gbmPhoto.SmoothingMode 
= System.Drawing.Drawing2D.SmoothingMode.HighQuality;
InBlock.gif
InBlock.gif            gbmPhoto.DrawImage(imgPhoto, 
new Rectangle(00, CutWidth, CutHeight), new Rectangle(PointX, PointY, CutHeight, CutHeight), GraphicsUnit.Pixel);
InBlock.gif            bmPhoto.Save(sImgPath, System.Drawing.Imaging.ImageFormat.Jpeg);
InBlock.gif
InBlock.gif            imgPhoto.Dispose();
InBlock.gif            gbmPhoto.Dispose();
InBlock.gif            bmPhoto.Dispose();
InBlock.gif
InBlock.gif            
return true;
ExpandedSubBlockEnd.gif        }

InBlock.gif        
catch (Exception err)
ExpandedSubBlockStart.gif        
{
InBlock.gif            
return false;
ExpandedSubBlockEnd.gif        }

ExpandedSubBlockEnd.gif    }

ExpandedBlockEnd.gif}

本文转自博客园cloudgamer的博客,原文链接:图片编辑类,如需转载请自行联系原博主。

相关文章:

  • tcpdump
  • UGUI
  • mysql -- 优化之ICP(index condition pushdown)
  • 感恩送书第1期:2019年快来了,感谢各位网友,送《Spring 5开发大全》
  • 用工作单元(IUnitOfWork)带给我们的是什么?
  • EF架构~将数据库注释添加导入到模型实体类中
  • PHP生成随机字符串
  • JMeter接口测试中文乱码问题总结
  • loongson官方PMON使用
  • 系统单据号生成规则推荐
  • Saltstack-4:数据系统grains
  • 脚踏七彩Scala.js,进军前端娱乐圈
  • Failed to lookup provider 'shm' for 'slotmem': is mod_slotmem_shm loaded??
  • Shell命令-线上查询及帮助之man、help
  • 如何设置Apache虚拟域名
  • echarts的各种常用效果展示
  • iOS | NSProxy
  • JavaScript HTML DOM
  • JavaScript-Array类型
  • Java超时控制的实现
  • Java的Interrupt与线程中断
  • Java基本数据类型之Number
  • JS进阶 - JS 、JS-Web-API与DOM、BOM
  • LeetCode刷题——29. Divide Two Integers(Part 1靠自己)
  • nodejs实现webservice问题总结
  • PHP 程序员也能做的 Java 开发 30分钟使用 netty 轻松打造一个高性能 websocket 服务...
  • Redis提升并发能力 | 从0开始构建SpringCloud微服务(2)
  • win10下安装mysql5.7
  • 创建一个Struts2项目maven 方式
  • 基于 Ueditor 的现代化编辑器 Neditor 1.5.4 发布
  • 七牛云假注销小指南
  • 使用API自动生成工具优化前端工作流
  • 算法-插入排序
  • 我建了一个叫Hello World的项目
  • 白色的风信子
  • 1.Ext JS 建立web开发工程
  • ionic异常记录
  • ​【原创】基于SSM的酒店预约管理系统(酒店管理系统毕业设计)
  • #etcd#安装时出错
  • #WEB前端(HTML属性)
  • (10)Linux冯诺依曼结构操作系统的再次理解
  • (11)MATLAB PCA+SVM 人脸识别
  • (Redis使用系列) SpirngBoot中关于Redis的值的各种方式的存储与取出 三
  • (SpringBoot)第二章:Spring创建和使用
  • (附源码)springboot 个人网页的网站 毕业设计031623
  • (附源码)计算机毕业设计SSM教师教学质量评价系统
  • (一)使用IDEA创建Maven项目和Maven使用入门(配图详解)
  • (转)GCC在C语言中内嵌汇编 asm __volatile__
  • (转载)hibernate缓存
  • .MSSQLSERVER 导入导出 命令集--堪称经典,值得借鉴!
  • .NET Core 中的路径问题
  • .Net MVC + EF搭建学生管理系统
  • .NET 常见的偏门问题
  • .NET6使用MiniExcel根据数据源横向导出头部标题及数据
  • .Net8 Blazor 尝鲜