对图片进行X,Y轴的翻转,黑白色转变
做完了修改图片的程序。用的Winfrom做的。昨天基本完成,记录一下使用的东西。
首先是将需要加载的图片放入picturebox控件,这里用到了openfiledialog 打开文件对话框
string fName = string.Empty;//文件名称 1 if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
fName = openFileDialog1.FileName;//记录需要加载的文件的路径
string picName = Path.GetFileName(fName);//根据路径,通过system.IO.Path获取路径中的文件名和扩展名
if (picName.Contains(".png") || picName.Contains(".jpg"))
{
Bitmap pic = new Bitmap(fName);//根据路径获取图片对象
this.pictureBox1.Image = pic;//将图片载入控件
bitlist.Add(new Bitmap(this.pictureBox1.Image));//这里是一个撤回的功能,将所有操作最后的结果图放入一个泛型集合
Xsfbl = scale("X");
Ysfbl = scale("Y");//因为图片加载进来是按照控件大小自动改变,所以要计算一下XY坐标的比例
//如果图片名称写到备注
try
{//这里做了一个备注功能,保存的时候将备注作为文件名保存,加载的时候再将文件名记入备注用控件。
string lpath = fName.Substring(fName.LastIndexOf("\\") + );//这里 .LastIndexOf("\\")是截取\\符号在fName中的最后一位索引
string path = lpath.Substring(,lpath.LastIndexOf("."));
string[] str = path.Split(',');
for (int i = ; i < dataGridView1.Rows[].Cells.Count; i++)
{
dataGridView1.Rows[].Cells[i].Value = str[i + ];
}
}
catch
{ }
/// <summary>
/// 获取图片缩放比例
/// </summary>
/// <returns>计算X轴还是Y轴</returns>
private float scale(string XY)
{
Image img = Image.FromFile(fName);//根据路径获取图片
if (pictureBox1.Height > )
{
if (XY == "X")
{
Xsfbl = (pictureBox1.Width * 1.0f) / img.Width;
return Xsfbl;
}
if (XY == "Y")
{
Ysfbl = (pictureBox1.Height * 1.0f) / img.Height;
return Ysfbl;
}
}
return ;
}
获取图片缩放比例
将图片转为为黑白图片
这个功能实现的方式就是通过循环得到并修改图片的每一个像素的颜色值(Bitmap.GetPixel(x,y)),最后将修改过的图片return出去。
修改像素时,因为每个色素的三原色满值是255,所以用255减去原来的值得到的就是相仿的颜色。再次执行这个方法可以将图片转回原来的颜色
如果想实现图片的灰化,可以取三原色的平均值。
/// <summary>
/// 将图片转为为黑白图片
/// </summary>
/// <param name="mybt">要进行处理的图片</param>
/// <param name="width">图片的长度</param>
/// <param name="height">图片的高度</param>
/// <returns>已经被处理后的黑白图片</returns>
public Bitmap BWPic(Bitmap mybm, int width, int height)
{
Bitmap bm = new Bitmap(width, height);//初始化一个Bitmap对象,用来记录处理后的图片
int x, y, result;//x,y是循环次数,result是记录处理后的像素值
Color pixel;
for (x = ; x < width; x++)
{
for (y = ; y < height; y++)
{
pixel = mybm.GetPixel(x, y);//获取当前坐标的像素值
//result = (pixel.R + pixel.G + pixel.B) / 3;//取红绿蓝三色的平均值(图片灰化)
//绘图,把处理后的值赋值到刚才定义的bm对象里面
bm.SetPixel(x, y, Color.FromArgb( - pixel.R, - pixel.G, - pixel.B));//翻转三原色
}
}
return bm;//返回黑白图片
}
将图片进行X,Y轴的翻转
图片翻转只需要用到bitmap类的RotateFlip方法
/// <summary>
/// 旋转图片
/// </summary>
/// <param name="img"></param>
/// <returns></returns>
public static Bitmap KiRotate(Bitmap img,string XY)
{
try
{
if (XY == "x")
{
img.RotateFlip(RotateFlipType.Rotate180FlipX);
}
else
{
img.RotateFlip(RotateFlipType.Rotate180FlipY);
}
return img;
}
catch
{
return null;
}
}
旋转图片
第二个参数只为了判断这次操作是旋转X轴还是Y轴
小结:
这两个功能主要是通过Bitmap获取图片的对象,然后进行控件赋值或者对图片对象的修改。
但是这里实现图片颜色翻转的方法,速度很慢,如果图片清晰度过高,会卡主程序几秒钟。
对图片进行X,Y轴的翻转,黑白色转变的更多相关文章
- css3 y轴翻转效果
这个小例子是hover的时候可一看到div沿着y轴转动一圈 思路:css写好动画transiton: all 1s; hover的时候给他一个状态transform:rotateY(180deg); ...
- android3D动画,绕y轴旋转
原文地址:http://blog.csdn.net/x_i_a_o_h_a_i/article/details/40449847 其实网上的3D旋转的例子很多,在这里我只是想把其代码做一个解释. 先上 ...
- WPF 设置控件阴影后,引发的Y轴位置变化问题
原文:WPF 设置控件阴影后,引发的Y轴位置变化问题 背景 最近遇到一个动画执行时,文本位置变化的问题.如下图: 如果你仔细看的话,当星星变小时,文本往下降了几个像素. 貌似有点莫名其妙,因为控件之间 ...
- vue中使用v-chart改变柱状图颜色以及X轴Y轴的文字颜色和大小以及标题
1.html部分 <ve-histogram :tooltip-visible="true" :x-axis="xAxis" :y-axis=" ...
- Java实现 LeetCode 面试题 01.07. 旋转矩阵(按照xy轴转+翻转)
面试题 01.07. 旋转矩阵 给你一幅由 N × N 矩阵表示的图像,其中每个像素的大小为 4 字节.请你设计一种算法,将图像旋转 90 度. 不占用额外内存空间能否做到? 示例 1: 给定 mat ...
- chart.js插件生成折线图时数据普遍较大时Y轴数据不从0开始的解决办法[bubuko.com]
chart.js插件生成折线图时数据普遍较大时Y轴数据不从0开始的解决办法,原文:http://bubuko.com/infodetail-328671.html 默认情况下如下图 Y轴并不是从0开始 ...
- highcharts 不显示X轴 Y轴 刻度
xAxis: { tickWidth:0, //设置刻度标签宽度 lineColor:'#ffffff',//设置坐标颜色 lineWidth:0, //设置坐标宽度 la ...
- highchart 设置双Y轴坐标 双x轴坐标方法
我们的图表一旦引入了两种不同单位或者数量级相差很大的数据以后,这时候需要两种坐标对其进行计量. 下面以设置双Y轴为例, y轴坐标的参数设置成: yAxis: [{ title: { text: '坐标 ...
- 绘制复数图形和双y轴图形
clearclct=0:0.1:2*pi;x=sin(t);y=cos(t);z=x+i*y;subplot(1,3,1)plot(t,z,'r') %注:这种方式下,不论参数t,z哪个是复数,都将忽 ...
随机推荐
- Linux 根文件系统目录结构
/:根目录 /bin:linux的常用命令 /sbin:linux的常用命令 /lib:库文件(so.elf) /etc:系统配置文件和脚本文件 /sys:驱动相关的信息 /dev:设备节点目录 /p ...
- Vim下的Web开发之html,CSS,javascript插件
Vim下的Web开发之html,CSS,javascript插件 HTML 下载HTML.zip 解压HTML.zip,然后将里面的所有文件copy到C:\Program Files\Vim\vi ...
- ORACLE用户的加锁、解锁
在DBA的日常工作中,经常遇到为Oracle用户解锁的操作:这篇文章给出在命令行下进行Oracle用户解锁的操作方法,通过几条简单的解锁语句就能完成此项工作.下面是具体的过程: 默认的scott用户是 ...
- 将xml转为array
/** * 将xml转为array * @param string $xml * @throws Exception */ public function FromXml($xml) { if (!$ ...
- GOF23设计模式之原型模式(prototype)
一.原型模式概述 1.通过new产生一个对象需要非常繁琐的数据准备和访问权限,则可以使用原型模式. 2.就是java中的克隆技术,以某个对象为原型,复制出新的对象,显然,新的对象具备原型对象的特点. ...
- [转]Jsp 映射
<servlet> <servlet-name>SimpleJspServlet</servlet-name> <jsp-file>/jsp/simpl ...
- webView放弃capture()截图的替代方法
float scale = webView.getScale(); height = (int) (webView.getContentHeight() * scale + 0.5); bitmap ...
- lamp环境应用实践
LAMP之apache2.4.33 apache工作模式 apache 常用工作模式有2种,区别在于 worker模式 1. 线程模式 2. 占用资源少 3. 稳定性略差 4. 并发大 prefork ...
- js内置对象中获取时间的用法--通过date对象获取。
Date对象: var today = new Date(); //年份: var year = today.getFullYear(); //月份 var month = today.getMont ...
- 【翻译】用 Expression Blend 创建酷炫的 Button
原文:Creating “Cool” Buttons with Expression Blend Author: Alex 在本文中,我们将考虑在Expression Blend用几种方法来创建酷炫的 ...