C# Winform 制作圆润图片效果。
先看图:如你所见,QQ、米聊、旺旺等软件,和各大论坛开始流行这样的头像设计风格。这些在网页CSS估计比较好做些。但是在Winform上怎么来实现呢,打开图片,经过一系列处...
先看图:
如你所见,QQ、米聊、旺旺等软件,和各大论坛开始流行这样的头像设计风格。
这些在网页CSS估计比较好做些。
但是在Winform上怎么来实现呢,打开图片,经过一系列处理,出来圆润的图片?
有没有思路或者方法,O(∩_∩)O谢谢。 展开
如你所见,QQ、米聊、旺旺等软件,和各大论坛开始流行这样的头像设计风格。
这些在网页CSS估计比较好做些。
但是在Winform上怎么来实现呢,打开图片,经过一系列处理,出来圆润的图片?
有没有思路或者方法,O(∩_∩)O谢谢。 展开
展开全部
string filename = "icon.png";//如果不是png类型,须转换
System.Drawing.Bitmap bitmap = new System.Drawing.Bitmap(filename);
for (int y = 0; y < 100; y++)//假设图片已经处理为100*100像素
{
for (int x = 0; x < 100; x++)
{
if ((x - 50) * (x - 50) + (y - 50) * (y - 50) > 50 * 50)//圆标准方程
{
//将圆以外的点设为透明
bitmap.SetPixel(x, y, System.Drawing.Color.FromArgb(0, 255, 255, 255));
}
}
}
pictureBox1.Image = bitmap;
效果如下
追问
好像有毛边。。。怎么解决谢谢
追答
private void Form1_Paint(object sender, PaintEventArgs e)
{
string filename = "icon.png";//如果不是png类型,须转换
System.Drawing.Bitmap bitmap = new System.Drawing.Bitmap(filename);
for (int y = 0; y < 100; y++)
{
for (int x = 0; x < 100; x++)
{
if ((x - 50) * (x - 50) + (y - 50) * (y - 50) > 50 * 50)
{
bitmap.SetPixel(x, y, System.Drawing.Color.FromArgb(0, 255, 255, 255));
}
}
}
Graphics g = CreateGraphics();
g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
g.DrawImage(bitmap, new Point(50, 50));
g.DrawEllipse(new Pen(Color.LightGray), 50, 50, 100, 100);
g.Dispose();
}
AiPPT
2024-09-19 广告
2024-09-19 广告
随着AI技术的飞速发展,如今市面上涌现了许多实用易操作的AI生成工具1、简介:AiPPT: 这款AI工具智能理解用户输入的主题,提供“AI智能生成”和“导入本地大纲”的选项,生成的PPT内容丰富多样,可自由编辑和添加元素,图表类型包括柱状图...
点击进入详情页
本回答由AiPPT提供
展开全部
C# 截取图像中的特定区域
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Drawing.Imaging;
namespace CutPicture
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
//加载图片
private void loadSrcBtn_Click(object sender, EventArgs e)
{
OpenFileDialog srcImageName = new OpenFileDialog();
if (srcImageName.ShowDialog() == DialogResult.OK)
{
Bitmap bmp = new Bitmap(Image.FromFile(srcImageName.FileName));
SrcImage.Image = bmp;
}
}
//截取图片 主要操作区域
private void cutImage(Point pos,int cutWidth, int cutHeight)
{
//先初始化一个位图对象,来存储截取后的图像
Bitmap bmpDest = new Bitmap(cutWidth, cutHeight, PixelFormat.Format32bppRgb);
//这个矩形定义了,你将要在被截取的图像上要截取的图像区域的左顶点位置和截取的大小
Rectangle rectSource = new Rectangle(pos.X, pos.Y, cutWidth, cutHeight);
//这个矩形定义了,你将要把 截取的图像区域 绘制到初始化的位图的位置和大小
//我的定义,说明,我将把截取的区域,从位图左顶点开始绘制,绘制截取的区域原来大小
Rectangle rectDest = new Rectangle(0, 0, cutWidth, cutHeight);
//第一个参数就是加载你要截取的图像对象,第二个和第三个参数及如上所说定义截取和绘制图像过程中的相关属性,第四个属性定义了属性值所使用的度量单位
g.DrawImage(SrcImage.Image, rectDest, rectSource, GraphicsUnit.Pixel);
//这是在GUI上显示被截取的图像
cutedImage.Image = (Image)bmpDest;
g.Dispose();
}
//保存截取的图片
private void saveCutImage_Click(object sender, EventArgs e)
{
SaveFileDialog saveImageName = new SaveFileDialog();
if (saveImageName.ShowDialog() == DialogResult.OK)
{
cutedImage.Image.Save(saveImageName.FileName);
}
}
//显示截取图片
private void showCutImageBtn_Click(object sender, EventArgs e)
{
Point pos = new Point(0, 0);
if (!(posX.Text == "" || posY.Text == ""))
{
pos.X = int.Parse(posX.Text);
pos.Y = int.Parse(posY.Text);
}
int cutWidth, cutHeight;
cutWidth = 20;
cutHeight = 20;
if (!(cutImageWidth.Text == "" || cutImageHeight.Text == ""))
{
cutWidth = int.Parse(cutImageWidth.Text);
cutHeight = int.Parse(cutImageHeight.Text);
}
this.cutImage(pos, cutWidth, cutHeight);
}
}
}
http://www.2cto.com/kf/201212/174390.html
把上面代码的矩形改为圆形,参考微软如何创建非矩形按钮 (Visual C#):
http://technet.microsoft.com/zh-cn/sysinternals/h4te2zh2(it-it,VS.80).aspx
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Drawing.Imaging;
namespace CutPicture
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
//加载图片
private void loadSrcBtn_Click(object sender, EventArgs e)
{
OpenFileDialog srcImageName = new OpenFileDialog();
if (srcImageName.ShowDialog() == DialogResult.OK)
{
Bitmap bmp = new Bitmap(Image.FromFile(srcImageName.FileName));
SrcImage.Image = bmp;
}
}
//截取图片 主要操作区域
private void cutImage(Point pos,int cutWidth, int cutHeight)
{
//先初始化一个位图对象,来存储截取后的图像
Bitmap bmpDest = new Bitmap(cutWidth, cutHeight, PixelFormat.Format32bppRgb);
//这个矩形定义了,你将要在被截取的图像上要截取的图像区域的左顶点位置和截取的大小
Rectangle rectSource = new Rectangle(pos.X, pos.Y, cutWidth, cutHeight);
//这个矩形定义了,你将要把 截取的图像区域 绘制到初始化的位图的位置和大小
//我的定义,说明,我将把截取的区域,从位图左顶点开始绘制,绘制截取的区域原来大小
Rectangle rectDest = new Rectangle(0, 0, cutWidth, cutHeight);
//第一个参数就是加载你要截取的图像对象,第二个和第三个参数及如上所说定义截取和绘制图像过程中的相关属性,第四个属性定义了属性值所使用的度量单位
g.DrawImage(SrcImage.Image, rectDest, rectSource, GraphicsUnit.Pixel);
//这是在GUI上显示被截取的图像
cutedImage.Image = (Image)bmpDest;
g.Dispose();
}
//保存截取的图片
private void saveCutImage_Click(object sender, EventArgs e)
{
SaveFileDialog saveImageName = new SaveFileDialog();
if (saveImageName.ShowDialog() == DialogResult.OK)
{
cutedImage.Image.Save(saveImageName.FileName);
}
}
//显示截取图片
private void showCutImageBtn_Click(object sender, EventArgs e)
{
Point pos = new Point(0, 0);
if (!(posX.Text == "" || posY.Text == ""))
{
pos.X = int.Parse(posX.Text);
pos.Y = int.Parse(posY.Text);
}
int cutWidth, cutHeight;
cutWidth = 20;
cutHeight = 20;
if (!(cutImageWidth.Text == "" || cutImageHeight.Text == ""))
{
cutWidth = int.Parse(cutImageWidth.Text);
cutHeight = int.Parse(cutImageHeight.Text);
}
this.cutImage(pos, cutWidth, cutHeight);
}
}
}
http://www.2cto.com/kf/201212/174390.html
把上面代码的矩形改为圆形,参考微软如何创建非矩形按钮 (Visual C#):
http://technet.microsoft.com/zh-cn/sysinternals/h4te2zh2(it-it,VS.80).aspx
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
GDI+ 图像处理
追问
不详细点?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询