联邦总部
Would you like to react to this message? Create an account in a few clicks or log in to continue.
最新主题
» 时间不见了
c小程序 Empty周五 24 七月 - 14:02 由 TehDDA

» 好好学习贴
c小程序 Empty周一 9 三月 - 23:00 由 Yangrousi

» [2014年7月]第二十二期水楼
c小程序 Empty周六 20 九月 - 17:22 由 Yangrousi

» 世界杯吐槽帖
c小程序 Empty周五 4 七月 - 14:15 由 Cathiec

» [2014年6月]第二十一期水楼
c小程序 Empty周四 3 七月 - 21:31 由 大菊花

» [2014年5月]第二十期水楼
c小程序 Empty周五 23 五月 - 7:43 由 Yangrousi

» C和C++集中交流帖
c小程序 Empty周三 7 五月 - 15:44 由 Cathiec

» [2014年4月]第十九期水楼
c小程序 Empty周日 27 四月 - 12:16 由 Yangrousi

» 【本版特典】故事接龙(规则说明及讨论)
c小程序 Empty周日 27 四月 - 12:00 由 Yangrousi

» [2014年3月]第十八期水楼
c小程序 Empty周三 2 四月 - 9:35 由 Cathiec

最优秀的发帖人
Yangrousi (3703)
c小程序 Vote_lcapc小程序 Voting_barc小程序 Vote_rcap 
Cathiec (2165)
c小程序 Vote_lcapc小程序 Voting_barc小程序 Vote_rcap 
Rousiyang (1680)
c小程序 Vote_lcapc小程序 Voting_barc小程序 Vote_rcap 
Kramer (1334)
c小程序 Vote_lcapc小程序 Voting_barc小程序 Vote_rcap 
TehDDA (1131)
c小程序 Vote_lcapc小程序 Voting_barc小程序 Vote_rcap 
云朵 (712)
c小程序 Vote_lcapc小程序 Voting_barc小程序 Vote_rcap 
avacyn (401)
c小程序 Vote_lcapc小程序 Voting_barc小程序 Vote_rcap 
大菊花 (296)
c小程序 Vote_lcapc小程序 Voting_barc小程序 Vote_rcap 
xintiaoboy (273)
c小程序 Vote_lcapc小程序 Voting_barc小程序 Vote_rcap 
Cryingclown (254)
c小程序 Vote_lcapc小程序 Voting_barc小程序 Vote_rcap 

统计
论坛共有46位注册会员
最新注册的会员是 KATEHOLIC

我们的会员们总共发布了12921个帖子 在220个主题中
登录

找回我的密码


c小程序

+5
Yangrousi
obelin
Cathiec
大菊花
miskayle
9 posters

向下

c小程序 Empty c小程序

帖子 由 miskayle 周日 10 二月 - 21:24

写一个小程序希望能引起大家对C的兴趣。希望能抛砖引玉。

大家用QQ的时候截图功能用的很多。但是程序上如何实现其实还比较有趣。这里就说说怎么用c来截取一个图片的一部分。

当然首先需要一个c的工程作为EEA的学生。大多是面向对象编程的。所以之后学弟学妹们这种编程最多。工程就如下图c小程序 110

这里我们后很多控件可以使用。这里主要用到2个按钮和2个picturebox 和一个openfiledialog 如图
c小程序 210
当然picbox没有填色。所以看不到。不过一会就能看到了。

首先是如何打开一个文件。其实这里openfiledialog的作用是方便查找。如果清楚文件路径的话能直接打开。不过介绍一下openfiledialog的作用也好。一般用这个控件都是快速获得文件路径已经名字。所以能够直接得到filename的返回值。

所以在按钮1我们写这样的代码
openFileDialog1.ShowDialog(); 这里是显示出对话框。来选择你需要的文件。当然也能缩小查询范围用filter参数。
name = openFileDialog1.FileName; 这里获取文件名,当然名字中是包含路径的。类似一个指针指向你选择的文件。

之后就是在picturebox中显示图片了。直接写如下代码
pictureBox1.Image = Image.FromFile(name); Image.FromFile这个函数就是从固定路径读取图片返回值是个systeme.drawing.image类的参数。说白了就是一个包涵了图片每一个像素格颜色的数组。不过在VC里面专有定义成一类。不算严格意义的数组。那就来看看执行结果如何
c小程序 310
萌妹子什么的大家就不要在意了!!!

之后就是重点了。。加入我只想要这个妹子的脸那一片。怎么办。
在QQ截图中。我们按下快捷键后会提示我们用鼠标滑动来确定一片区域。这里面发生了什么???
其实这里面发生了2个事件。。1 你鼠标按左键点下去。。2 你鼠标在某一点松开左键。
这么说起来感觉很2B。。但是就是这点事情决定了你的截取坐标。
所以我们在VC中构造同样的事件。鼠标down事件和鼠标up事件。
在picturebox1就是左边的那个。在事件栏找到这2个事件然后双击就能进入事件的代码编写
c小程序 410

和上面说的一样。我们做的事情也就只是确定你想要截取的是那一片区域。最直观的表达方式就是坐标点。
所以2个事件中我们只要将坐标值赋值出来即可。
代码如下
private void pictureBox1_MouseDown(object sender, MouseEventArgs e) 这里大家注意。虽说是个事件但是也是子函数,那么括号后面的也就是进入变量。大家想想。你在点击鼠标的时候事件的进入变量是什么。就是你的鼠标点击。这里也就解释了为啥能简单的用e.x和e.y得到坐标。因为这里进入变量MouseEventArgs e就是指的你的鼠标参数。而事件名称也就是子函数的名称了。
{
label3.Text = Convert.ToString( x = e.X);
label4.Text = Convert.ToString( y = e.Y);这里的label只是为了显示具体坐标值。其实不写也没关系。

}

private void pictureBox1_MouseUp(object sender, MouseEventArgs e)
{
label5.Text = Convert.ToString( x1 = e.X);
label6.Text = Convert.ToString( y1 = e.Y);
}
之后就是如何“画”出我们想要的那一片区域了。
这里我们需要用到VC的一个类。bitmap类 当然也有image类(为啥不用后面的,呵呵我绝对不会告诉你我也不怎么了解后面的,我也是小白一个)
所以我们定义2个bitmap
Bitmap text,m;
然后我们让m等于原图
m=new Bitmap(pictureBox1.Image);
text是我们要画的那个图。
小科普一下。。任何图在电脑里面其实都是有很多很多小格子组成的。一个小格子只能填充单一的一种颜色。而一个图的清晰度则是由格子的数量所决定的。格子越多越小。则图片越清晰,也就是所谓的像素越高。
那么我们要画一张图的一部分说白了就是挨个把我们确定坐标的区域里每一个小格子的颜色数据挨个复制给text里的小格子这样就达到了截图的效果。
所以在按钮2里写下了如下代码
private void button2_Click(object sender, EventArgs e)
{
int i,j;
for (i = x; i < x1; i++) 从x到x1也就是截取的长度
{
for (j = y; j < y1; j++) 这里是宽度
{
text.SetPixel(i-x,j-y,m.GetPixel(i,j)); 这里的pixel是在VC里一种颜色数据的储存方法。使用的RBG方法(打魔兽的童鞋应该很容易记下来吧哦呵呵呵呵积分战场什么的)其实RBG对应就是red blue green 电脑三原色。他们的值分别是0-255的8为二进制.pixel的值也可以自己直接设置三原色的值。不过这里我们要做的是复制。所以就用get和set.
}
}
pictureBox2.Image = text; 这里当然就是在picturebox2里显示结果啦

}
来看看最后的效果。
c小程序 510
这样咱们就有一个萌妹子的头像了。偶哈哈哈哈

虽然QQ未必用的是c语言写的。但是算法。也就是实现方法应该和这个是一样的。领会了精神。哪怕换VB,java也能够实现。
虽然不复杂。但是也是很有意思的。总结一下。其实编程像我们EEA最重要的编程是想办法构造事件。怎样去实现你想要的结果。实现这个结果的过程中发生了什么这个最重要。弄清各个事件之间的逻辑关系。这个就是咱们的算法。多写写程序也就有体会了

PS、EEA的童鞋。这个是L3c/c++一个选修的小题目哦。虽然每一年的题目未必一样。但是了解下总是好的。

miskayle
论坛元老
论坛元老

帖子数 : 9
注册日期 : 12-10-22

返回页首 向下

c小程序 Empty 回复: c小程序

帖子 由 大菊花 周日 10 二月 - 23:05

恩 这门课L3EAII上学期可选 4选2的科目之一 我们今年没做这道题
另外这门课最麻烦的部分是上网搜指令怎么用
大菊花
大菊花
论坛普通会员
论坛普通会员

帖子数 : 296
注册日期 : 12-10-25

返回页首 向下

c小程序 Empty 回复: c小程序

帖子 由 Cathiec 周一 11 二月 - 10:38

好帖...顶!!!
Cathiec
Cathiec
救世主
救世主

帖子数 : 2165
注册日期 : 12-10-22

返回页首 向下

c小程序 Empty 回复: c小程序

帖子 由 obelin 周一 11 二月 - 22:07

好复杂的说
obelin
obelin
论坛元老
论坛元老

帖子数 : 41
注册日期 : 12-10-22

返回页首 向下

c小程序 Empty 回复: c小程序

帖子 由 Yangrousi 周一 11 二月 - 22:51

好贴 顶!
Yangrousi
Yangrousi
论坛超级会员
论坛超级会员

帖子数 : 3703
注册日期 : 12-10-22

返回页首 向下

c小程序 Empty 回复: c小程序

帖子 由 avacyn 周二 12 二月 - 15:04

顶这个帖!

avacyn
论坛普通会员
论坛普通会员

帖子数 : 401
注册日期 : 12-10-22

返回页首 向下

c小程序 Empty 回复: c小程序

帖子 由 Cathiec 周二 12 二月 - 21:13

宇神的帖一定要用力顶!
Cathiec
Cathiec
救世主
救世主

帖子数 : 2165
注册日期 : 12-10-22

返回页首 向下

c小程序 Empty 回复: c小程序

帖子 由 Yangrousi 周三 13 二月 - 13:32

没力啊..
Yangrousi
Yangrousi
论坛超级会员
论坛超级会员

帖子数 : 3703
注册日期 : 12-10-22

返回页首 向下

c小程序 Empty 回复: c小程序

帖子 由 Cathiec 周三 13 二月 - 22:24

Yangrousi 写道:没力啊..

你是不是看到与CS有关的东西就虚啊...
Cathiec
Cathiec
救世主
救世主

帖子数 : 2165
注册日期 : 12-10-22

返回页首 向下

c小程序 Empty 回复: c小程序

帖子 由 avacyn 周四 14 二月 - 2:52

Cathiec 写道:
Yangrousi 写道:没力啊..

你是不是看到与CS有关的东西就虚啊...

Yangrousi没问题的

avacyn
论坛普通会员
论坛普通会员

帖子数 : 401
注册日期 : 12-10-22

返回页首 向下

c小程序 Empty 回复: c小程序

帖子 由 Cathiec 周四 14 二月 - 11:06

avacyn 写道:
Cathiec 写道:
Yangrousi 写道:没力啊..

你是不是看到与CS有关的东西就虚啊...

Yangrousi没问题的

你也没问题的,相信我...
Cathiec
Cathiec
救世主
救世主

帖子数 : 2165
注册日期 : 12-10-22

返回页首 向下

c小程序 Empty 回复: c小程序

帖子 由 avacyn 周四 14 二月 - 13:34

Cathiec 写道:
avacyn 写道:
Cathiec 写道:
Yangrousi 写道:没力啊..

你是不是看到与CS有关的东西就虚啊...

Yangrousi没问题的

你也没问题的,相信我...

我相信你,你也要相信自己。

avacyn
论坛普通会员
论坛普通会员

帖子数 : 401
注册日期 : 12-10-22

返回页首 向下

c小程序 Empty 回复: c小程序

帖子 由 Yangrousi 周五 15 二月 - 14:46

我不虚 我的算法导论和java入门到了
Yangrousi
Yangrousi
论坛超级会员
论坛超级会员

帖子数 : 3703
注册日期 : 12-10-22

返回页首 向下

c小程序 Empty 回复: c小程序

帖子 由 Kramer 周六 16 二月 - 18:22

顶的飞起!
Kramer
Kramer
论坛元老
论坛元老

帖子数 : 1334
注册日期 : 12-10-22

返回页首 向下

c小程序 Empty 回复: c小程序

帖子 由 Rousiyang 周六 16 二月 - 18:49

技术贴 要顶~~
Rousiyang
Rousiyang
论坛资深会员
论坛资深会员

帖子数 : 1680
注册日期 : 12-10-23

返回页首 向下

c小程序 Empty 回复: c小程序

帖子 由 Yangrousi 周六 16 二月 - 22:14

Rousiyang 写道:技术贴 要顶~~
你都水到这里来了啊
Yangrousi
Yangrousi
论坛超级会员
论坛超级会员

帖子数 : 3703
注册日期 : 12-10-22

返回页首 向下

c小程序 Empty 回复: c小程序

帖子 由 colorjack 周六 9 十一月 - 17:38

大菊花 写道:恩  这门课L3EAII上学期可选  4选2的科目之一  我们今年没做这道题
另外这门课最麻烦的部分是上网搜指令怎么用
这个是很重要的,据我所知国外计算机专业的学生上课真正学到的东西是非常少的,
他们主要的能力就是上网去搜寻获取信息和资料
这个能力是非常强的也是非常重要的

colorjack
论坛普通会员
论坛普通会员

帖子数 : 224
注册日期 : 12-10-31

返回页首 向下

c小程序 Empty 回复: c小程序

帖子 由 Cathiec 周六 9 十一月 - 17:42

+1
强烈有体会
主要是靠自学吧
只要学了大概的框架结构
基本上都是靠自己再零零碎碎地补知识
Cathiec
Cathiec
救世主
救世主

帖子数 : 2165
注册日期 : 12-10-22

返回页首 向下

c小程序 Empty 回复: c小程序

帖子 由 Yangrousi 周日 10 十一月 - 14:54

+1
所有的实验和projet都是要自己补知识 所有学习的过程就是获得短时间内处理一个完全不熟的projet的能力和经验
Yangrousi
Yangrousi
论坛超级会员
论坛超级会员

帖子数 : 3703
注册日期 : 12-10-22

返回页首 向下

返回页首


 
您在这个论坛的权限:
不能在这个论坛回复主题