做完了修改图片的程序。用的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轴的翻转,黑白色转变的更多相关文章

  1. css3 y轴翻转效果

    这个小例子是hover的时候可一看到div沿着y轴转动一圈 思路:css写好动画transiton: all 1s; hover的时候给他一个状态transform:rotateY(180deg); ...

  2. android3D动画,绕y轴旋转

    原文地址:http://blog.csdn.net/x_i_a_o_h_a_i/article/details/40449847 其实网上的3D旋转的例子很多,在这里我只是想把其代码做一个解释. 先上 ...

  3. WPF 设置控件阴影后,引发的Y轴位置变化问题

    原文:WPF 设置控件阴影后,引发的Y轴位置变化问题 背景 最近遇到一个动画执行时,文本位置变化的问题.如下图: 如果你仔细看的话,当星星变小时,文本往下降了几个像素. 貌似有点莫名其妙,因为控件之间 ...

  4. vue中使用v-chart改变柱状图颜色以及X轴Y轴的文字颜色和大小以及标题

    1.html部分 <ve-histogram :tooltip-visible="true" :x-axis="xAxis" :y-axis=" ...

  5. Java实现 LeetCode 面试题 01.07. 旋转矩阵(按照xy轴转+翻转)

    面试题 01.07. 旋转矩阵 给你一幅由 N × N 矩阵表示的图像,其中每个像素的大小为 4 字节.请你设计一种算法,将图像旋转 90 度. 不占用额外内存空间能否做到? 示例 1: 给定 mat ...

  6. chart.js插件生成折线图时数据普遍较大时Y轴数据不从0开始的解决办法[bubuko.com]

    chart.js插件生成折线图时数据普遍较大时Y轴数据不从0开始的解决办法,原文:http://bubuko.com/infodetail-328671.html 默认情况下如下图 Y轴并不是从0开始 ...

  7. highcharts 不显示X轴 Y轴 刻度

    xAxis: { tickWidth:0,        //设置刻度标签宽度 lineColor:'#ffffff',//设置坐标颜色 lineWidth:0,        //设置坐标宽度 la ...

  8. highchart 设置双Y轴坐标 双x轴坐标方法

    我们的图表一旦引入了两种不同单位或者数量级相差很大的数据以后,这时候需要两种坐标对其进行计量. 下面以设置双Y轴为例, y轴坐标的参数设置成: yAxis: [{ title: { text: '坐标 ...

  9. 绘制复数图形和双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哪个是复数,都将忽 ...

随机推荐

  1. 使用实例 ---- 使用NUnit在.Net编程中进行单元测试

    [---  资料是从免费网站上获取的,上载在这里,只为交流学习目的,文章原作者保留所有权力,如本博客的内容侵犯了你的权益,请与以下地址联系,本人获知后,马上删除.同时本人深表歉意,并致以崇高的谢意!e ...

  2. c#代码加密

    源代码保护:怎样利用MaxtoCode加密dotNet源代码 http://www.webkaka.com/blog/archives/MaxtoCode-encrypt-dotnet-program ...

  3. python time模块 sys模块 random模块

    1,time模块 python中的内置模块 #1,显示当前时间戳 print(time.time()) #2,字符串格式化 print(time.strftime('%Y-%m-%d-%H-%M-%S ...

  4. listener单点登录和在线人数

    1,jsp提交一个form 2,把收集到的数据放到一个personInfo类中,personInfo类放进session中 3,添加的时候触发listener,把一个personInfo的accoun ...

  5. win7 + python2.7 安装scipy

    问题: 直接pip install scipy将不能正确安装,缺少文件 方法: 下载  "scipy‑0.19.0‑cp27‑cp27m‑win_amd64.whl"[90多M] ...

  6. mysql binlog_format row and Statement 比较

    两种模式的对比: Statement 优点 历史悠久,技术成熟: 产生的 binlog 文件较小: binlog 中包含了所有数据库修改信息,可以据此来审核数据库的安全等情况: binlog 可以用于 ...

  7. HttpURLConnection的使用步骤

    创建一个URL对象: URL url = new URL(http://www.baidu.com); 调用URL对象的openConnection( )来获取HttpURLConnection对象实 ...

  8. i和j的值交换的方法

        方法一: int i = 3, j = 5; int c = i; i = j; j = c;     方法二: int i = 3, j = 5; int n = i + j; i = n ...

  9. Mac运维安装软件

    Maccrt软件 sudo spctl --master-disable 打开软件,复制到app,按照sn.txt输入即可 sudo spctl --master-enable crt快捷键crtl ...

  10. MyBatis的适用场景和生命周期

    MyBatis使用场景 对比Hibernate和MyBatis是我们常见的话题,Hibernate作为常用的ORM框架,它使用起来简单易懂,对于SQL语言的封装,让对于SQL并不是很熟练的程序员也可以 ...