做完了修改图片的程序。用的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. bzoj 2178 圆的面积并——辛普森积分

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2178 把包含的圆去掉.横坐标不相交的一段一段圆分开算.算辛普森的时候预处理 f( ) ,比如 ...

  2. 关于tab的切换之共用html页面,而引发的页面跳转错乱问题

    在一个项目中的同一个模块中,有多个tab(并且多个tab对应的页面结构完全一样),tab的每次切换,不同tab调用不同的接口,利用一个switch进行判断,根据当前的类型去调用不同的接口,返回不同数据 ...

  3. Python——基础数据类型(补充)

    1.基础数据类型汇总补充 (1)小数据池:   为了节省空间,数字和字符串有,其他的没有[了解]   数字:-5---256之间的数字共用一个内存地址 #(1)i1 = i2 id(i1) == id ...

  4. 关于PIC和FPGA

    PIC:Peripheral Interface Controller. FPGA:Field Programmable Gate Array. 关于二者: 区别: FPGA是逻辑门器件,可以配置成为 ...

  5. MySQL COUNT(*) & COUNT(1) & COUNT(col) 比较分析

    在面试的时候我们会经常遇到这个问题: MySQL 中,COUNT(*).COUNT(1).COUNT(col) 有区别吗? 有区别. 接下来我们分析一下这三者有什么样的区别. 一.SQL Syntax ...

  6. Java中的<< 和 >> 和 >>> 详细分析

    <<表示左移移,不分正负数,低位补0: 注:以下数据类型默认为byte-8位 左移时不管正负,低位补0 正数:r = 20 << 2 20的二进制补码:0001 0100 向左 ...

  7. oracle打补丁步骤简介

    1.了解opatchopatch是用于维护"个别"补丁的,有人称其为interim path或是one-off patch该命令的存放位置在$ORACLE_HOME下的OPatch ...

  8. socket-简单实现

    server--------------#!/usr/bin/env python # encoding: utf-8  # Date: 2018/6/7 from socket import * s ...

  9. Dubbo与Zookeeper、SpringMVC整合和使用(负载均衡

    转载:http://blog.csdn.net/congcong68/article/details/41113239 互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架 ...

  10. leetcode380

    class RandomizedSet { public: /** Initialize your data structure here. */ RandomizedSet() { } /** In ...