对图片进行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哪个是复数,都将忽 ...
随机推荐
- python官网
https://www.python.org/ https://docs.python.org/2/library/pydoc.html
- c# 数据库通用类DbUtility
DbProviderType数据库类型枚举 /// <summary> /// 数据库类型枚举 /// </summary> public enum DbProviderTyp ...
- winform 控件随页面大小进行自适应
这个功能网上很多人在问,也有不少人给出过答案,经过实际使用,觉得网上这段代码实现的效果比较好,记录一下 核心代码就是下面这个类 using System; using System.Collectio ...
- 适配:px与dp转换
public class DensityUtil { /** * 根据手机的分辨率从 dp 的单位 转成为 px(像素) */ public static int dip2px(Context con ...
- struts2学习(5)拦截器简介以及例子执行过程
一.拦截器简介: 二.Struts2预定义拦截器&拦截器栈 在执行action之前和之后,拦截器进行了操作: 比如struts-default.xml中就有很多预定义的拦截器: 拦截器栈: ...
- CentOS 7 安装 Nodejs npm 及版本冲突解决
JC&BC 笔记: 可能没安装过 npm 的人会有点疑惑,安装 npm 跟安装 nodejs 有什么关系? 安装 npm 其实就是安装 nodejs 的过程.这一点官方说的很明白,npm 依赖 ...
- .NET System.Web.HttpContext.Current.Request报索引超出数组界限。
移动端使用Dio发送 FormData, 请求类型 multipart/form-data, FormData内可以一个或多个包含文件时. 请求接口时获取上传的fomdata数据使用 System.W ...
- Jsp+Servlet+JDBC的使用复习
最近对JDBC进行了复习,对事物的理解,连接池的使用等部分都有一个复习,所以使用Servlet+JDBC完成了一个小Demo,在这里对这种底层的操作进行总结.框架的使用的确方便了我们的开发,但是底层的 ...
- 【学习笔记】Manacher
扔板子跑路 代码 POJ3974 #include <cstdio> #include <cstring> #include <algorithm> using n ...
- 【UVA】1596 Bug Hunt(模拟)
题目 题目 分析 算是个模拟吧 代码 #include <bits/stdc++.h> using namespace std; map<int,int> a[ ...