小白C#窗体系列-03.图片查看器

新增拖拽功能

如果出现看不见的情况明天就好了,好了我们步入正题,作为一个吊丝,如果你用你女朋友/女神的照片做了个图片浏览器,那么你每次用来看图的时候第一张看的都是她了,当看到第二张你想看见的图时,是不是有个鲜明的对比呢,是落差还是什么的,就因人而异咯~~又开始想入非非了?哈哈,不扯淡了,继续:4步走~~~

软件下载(.NET 4.0 框架)http://pan.baidu.com/s/1i387wJ7  【源码看下面】

逆天图片查看器1.0.1 下载   http://pan.baidu.com/s/1o6Hlrx4 【新增拖拽功能】

一、设计图纸:  
二、代码分析:(赶时间写的,写了快50分钟了,如果有解释不详细的可以问)
1、打开指定图片 OpenFileDiaog控件,先设置过滤器,然后再打开图片,显示在picturebox上

OpenFileDialog openFile = new OpenFileDialog();

openFile.Filter = "jpg图像(*.jpg)|*.jpg|png图像(*.png)|*.png|bmp图像(*.bmp)|*.bmp|所有格式(*.*)|*.*";

openFile.Title = "逆天只允许你打开一张图片";

if (openFile.ShowDialog() == DialogResult.OK)

{

string filePath = openFile.FileName;

ShowPhoto(filePath, PictureBoxSizeMode.Zoom);//调用显示图片的方法---方法看下面

int lastIndex = filePath.LastIndexOf(@"\");

paths = Directory.GetFiles(filePath.Substring(0, lastIndex));//真正获得该目录下所有文件的路径

}

2、越界智能提醒 放个lable上面,不用就visible=false,用就设置为true,再设置下按钮自动隐藏显现

private void MainForm_Load(object sender, EventArgs e)

{

lbl1.Visible = false;//智能提示默认不可见

}

#region 按钮显示和隐藏

public void VisibleFalse()

{

pbtnLeft.Visible = false;

pbtnRight.Visible = false;

}

public void VisibleTrue()

{

pbtnLeft.Visible = true;

pbtnRight.Visible = true;

}

private void pbtnLeft_MouseLeave(object sender, EventArgs e)

{

VisibleFalse();

}

private void pbtnRight_MouseLeave(object sender, EventArgs e)

{

VisibleFalse();

}

private void pictureBox1_MouseLeave(object sender, EventArgs e)

{

VisibleTrue();

}

#endregion

3、置顶显示图片   置顶是TopMost,显示图片因为非常常用就封装一个方法

// 置顶

if (topmost1.Checked == false)

{

this.TopMost = false;

topmost1.Text = "     窗 体 置 顶";

}

else

{

this.TopMost = true;

topmost1.Text = "     取 消 置 顶";

}

//显示图片

public void ShowPhoto(string filePath, PictureBoxSizeMode mode) //PictureBoxSizeMode 枚举类型(以什么方式显示)

{

pictureBox1.ImageLocation = filePath;

pictureBox1.SizeMode = mode;

}

4、键盘控制切换 这个放在MainForm_KeyDown事件中,如果你想放在picturebox中那记得聚焦一下

private void MainForm_KeyDown(object sender, KeyEventArgs e)//触发按键时

{

if (e.KeyCode == Keys.Left || e.KeyCode == Keys.Up)//上一张

{

GetLeft();

}

if (e.KeyCode == Keys.Right || e.KeyCode == Keys.Down)//下一张

{

GetRight();

}

if (e.Control == true && e.KeyCode == Keys.S)

{

SavePhoto();

}

}

5、幻灯片的模式 思路就是Timer控件+Random,产生随机数组(下标),根据这个随机数来显示,Timer控件,每1秒调用一次下一张的方法【??注意Timer的启用和关闭,不施放资源会越来越卡的!!!】

//顺序播放________________________________________________________________________________________

if (sequence.Checked == true)

{

timer2.Enabled = true;

timer2.Start();

sequence.Text = "     取 消 播 放";

}

else

{

sequence.Text = "     顺 序 播 放";

timer2.Stop();

}

private void timer2_Tick(object sender, EventArgs e)//顺序播放

{

GetRight();

}

public void GetRight()   //下一张

{

try

{

i++;

if (i >= paths.Length)

{

i = 0;

lbl1.Visible = true;

timer1.Enabled = true;//节约资源

timer1.Start();

}

ShowPhoto(paths[i], PictureBoxSizeMode.Zoom);

}

catch

{

timer2.Stop();

sequence.Text = "     顺 序 播 放";

MessageBox.Show("亲,你还没右键打开图片呢!", "逆天友情提醒");

}

}

//逆序播放________________________________________________________________________________________

try

{

if (random.Checked == true)

{

timer3.Enabled = true;

timer3.Start();

random.Text = "     取 消 播 放";

}

else

{

timer3.Stop();

random.Text = "     随 机 播 放";

}

}

catch

{

MessageBox.Show("亲,你确定你打开了图片?", "逆天友情提醒");

}

private void timer3_Tick(object sender, EventArgs e)//随机播放

{

try

{

Random r = new Random();

int n = r.Next(0, paths.Length);

pictureBox1.ImageLocation = paths[n];

}

catch

{

timer3.Stop();

random.Text = "     随 机 播 放";

MessageBox.Show("亲,你还没打开图片呢!");

}

}

6、图片可以另存 利用了savaFile控件,设置过滤器,获取保存后的图片名字,给image创建一个对象用来接收pictureBox上的图片,image.sava()就可以了[如果你想保存旋转之后的图片就直接右击保存或者Ctrl+S]

SaveFileDialog savaFile = new SaveFileDialog();

savaFile.Filter = "jpg图像(*.jpg)|*.jpg|png图像(*.png)|*.png|bmp图像(*.bmp)|*.bmp|所有格式(*.*)|*.*";  //过滤器

savaFile.Title = "很喜欢这张图片吧~";

if (savaFile.ShowDialog() == DialogResult.OK)

{

string name = savaFile.FileName;

Image image = pictureBox1.Image;

image.Save(name);

}

7、图片全屏显示 思路是这样的,把窗体边框样式设置为None,然后让窗体最大化

this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;

this.WindowState = FormWindowState.Maximized;

8、图片旋转功能 系统自带Image.RotateFlip(RotateFlipType)方法,用完后记得pictureBox1.Refresh()一下

//逆时针转

pictureBox1.Image.RotateFlip(RotateFlipType.Rotate90FlipXY);

pictureBox1.Refresh();

//顺时针转

pictureBox1.Image.RotateFlip(RotateFlipType.Rotate90FlipNone);

pictureBox1.Refresh();

9、浅浅的小说明

还有图片删除跟旋转后保存旋转后的图像就下次再说吧

本来准备弄一个靠边隐藏之类的优化的,时间问题就下次弄吧(8期以后)

10、异常一定到位

一个程序大Bug不能有!        不是程序没Bug而是你没找到Bug!

开放过程中多注意点,把每个if else都考虑到,实例化对象时候把未将对象实例化考虑进去,可以省很多事情

很多枚举类型的东西不需要都记得,你记不得时候打个【空格】他就自动出来了

11、★新增:拖拽功能         窗体加载时候加这一句话:this.pictureBox1.AllowDrop = true;           PictureBox两个事件:DragEnter(拖拽时发生) DragDrop(拖拽完成时发生)

#region PictureBox支持拖拽

private void pictureBox1_DragEnter(object sender, DragEventArgs e)

{

if (e.Data.GetDataPresent(DataFormats.FileDrop))

{

e.Effect = DragDropEffects.Link;

}

else

{

e.Effect = DragDropEffects.None;

}

}

private void pictureBox1_DragDrop(object sender, DragEventArgs e)

{

string fileName = ((System.Array)e.Data.GetData(DataFormats.FileDrop)).GetValue(0).ToString();

ShowPhoto(fileName, PictureBoxSizeMode.Zoom);//调用显示图片的方法

int lastIndex = fileName.LastIndexOf(@"\");

paths = Directory.GetFiles(fileName.Substring(0, lastIndex));//真正获得该目录下所有文件的路径

this.pictureBox1.Image = Image.FromFile(fileName);

}

#endregion

三、源码分享:http://pan.baidu.com/s/13vSXC
四、视频共享: 等~~~

本期推荐: 23种设计模式(PDF+源码) {补充}                                                                    下一期:点名系列的小系统(简单)

时间: 2024-08-24 16:02:22

小白C#窗体系列-03.图片查看器的相关文章

小白C#窗体系列-02.二维码生成器

今天是情人节,咳,男人们带着他们的男朋友们,女人带着她们的女朋友们愉快的逛着街.逆天也就不随大众了,就继续出C#小白系列的教程了~~~ 实在没空去录教程了,就看看文档吧,大家都知道的,录教程是比较花时间的,我不想草草了事,那是对大家和我自己的不负责,视频可以以后再录,不过软件和源码以及文档得先弄好,毕竟逆天不喜欢失信与自己~~ 废话不说了,开始我们的教程吧~ 软件下载(.NET 4.0 框架)http://pan.baidu.com/s/1i3BUVNv[源码看下面] 一.设计图纸: 二.代码分

Android笔记二十七.Bitmap之简易图片查看器

转载请表明出处:http://blog.csdn.net/u012637501(嵌入式_小J的天空) 为了增强用户之间的交互,Android系统中提供了一些API和部件给我们开发美观有趣的应用.比如Android系统提供了ImageView来显示静态图片.AnimationDrawble来开发逐帧动画以及通过Animation对普通图片使用不减动画等.另外,Android应用中的图片不仅包括*.png.*.jpg.*.gif等格式的位图,也包括使用XML资源文件定义的各种Drawable对象.关

Qt项目实战2:简单的图片查看器(1)

在博文http://www.cnblogs.com/hancq/p/5817108.html中介绍了使用空的Qt项目创建带有菜单栏.工具栏的界面. 这里,使用一个简单的图片查看器项目,来熟悉一下Qt的图片显示和基本操作. 该项目分为两部分: (1)实现图片的打开.关闭.居中显示.上一张/下一张切换 (2)实现图片的放大.缩小.左旋.右旋.另存为等操作 需要用的Qt类: QFileDialog QImage QPixmap QFileInfo 使用空的Qt项目创建带有菜单栏和工具栏的界面的操作参考

Canvas---Canvas图像处理、图片查看器实现思路整理、拖动边界控制

没想到一个图片查看器花了我这么多时间,而且没做好. 现在整理下思路,然后把不足的地方记一下,日后请教他人. 基本思路: 一.图片查看器功能---缩放 要实现自由缩放,先要实现图片对canvas的自适应,就是给你一张大图片,你能够把它合理缩放后恰好绘制在canvas中. 具体做法是:例如:图片为500*500,canvas为240*320,那就取缩放宽度为240,长度为240/500*500,利用缩放宽度与长度,绘制图片即可. 然后是自由缩放,这时,你的缩小放大对象只要是一个矩形就好,然后图片去适

发布两款JQ小插件(图片查看器 + 分类选择器),开源

图片查看器,github地址:https://github.com/VaJoy/imgViewer 效果如下: 这款当初大概写了2小时,有点匆忙地赶出来的,使用的接口很简单: $.bindViewer(".viewer-item"); 它的实现其实也没啥复杂的原理,唯一觉得可说的地方是图片展开的过程 —— 从小变大动态过程的实现.主要是靠这一段代码实现的: $(this).css({"top": win_h / 2 + sroll_t, "margin-l

小白C#窗体系列-01.简易浏览器

最近重伤,今天正好放假,就抽个空出C#第一集,开发完毕... 如果你看不到这篇文章,那过一天就可以看见了. 软件下载(.NET 4.0 框架)http://pan.baidu.com/s/1c03X7vM[源码看下面] 一.设计图纸: 二.代码分析 1.后退键. 前进键.停止键.刷新键:这几个功能本来我是准备用个数组来存储,可以前进后退的,后来啃他自带方法的时候发现微软提供了方法,也就偷个懒了后退按钮 this.webBrowser1.GoBack(); 前进按钮 this.webBrowser

最简单的图片查看器

最简单的图片查看器,支持放大.缩小.鼠标拖动. 下面是代码,非常简单: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>pic view</title> </head> <body> <div id="pic" class="pic"

require、backbone等重构手机图片查看器

本文是对之前的部分补充,也是对最近学习require.backbone的一次实例化的实践,希望对正在学习理解中的同学们有帮助 前文请前往:制作手机使用的网页图片查看器 新手机图片查看器 网页部分 require引入是重点,指明了主函数所在文件路径 <!doctype html> <html lang="zh-cn"> <head> <title>webapp图片查看器</title> <meta charset=&quo

制作手机使用的网页图片查看器

这几天抽空在为项目开发一个量身的图片查看器,目前已初步完成需求 开发场景是:在一个多文件下载展示列表中,如检测某些文件为图片时,则点击该文件时打开图片查看器展示该图片,并将列表内其它图片同时展示查看器队列内,可供前后滑动查看及其它附带功能 乍一听功能点似乎有点多而且有些复杂,需要梳理一下 功能点整理 首先,我们要获得点击的图片文件对象及符合条件的图片文件对象集 其次,图片查看器的制作及图片队列展示 然后,图片友好加载方式 最后,图片查看器触摸滑动及滑动后相关功能的实现 简单整理了一下,好像也不多