C#操作摄像头照相(考生的大头照),怎样弄个取景框?

随缘而聚 2008-01-11 03:40:45
大家好!
我现在要做一个关于摄像头照相的程序,现在要求有个取景框,点“照相”时得到的照片就是取景框中的图像部分。现在已经做出点“照相”是全部的图像部分,但图片有多余的部分(是考生的大头像,只要求照的是头部)。

取景框的要求是进入照相的窗口时就存在,可以拖动。

各位帮帮忙,谢谢了!
...全文
711 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
zp1183299713 2012-07-19
  • 打赏
  • 举报
回复
楼主的问题解决了吗?
能否分享下代码?
谢谢!
1183299713@qq.com
zkpplpp 2010-05-13
  • 打赏
  • 举报
回复
楼主的问题解决了吗 能否分享下代码啊 我现在也在做这个 很是需要!谢谢了! stusos@163.com
十多个撒反对 2009-08-26
  • 打赏
  • 举报
回复
楼主的问题解决了没有?
我也正在写类似的程序,
要急用,能否分享一下
先谢谢了!
我邮箱whysky2008@gmail.com
jizhaoliang 2009-06-01
  • 打赏
  • 举报
回复
楼主如何照相能不能把代码共享一下,谢谢了,我邮箱aidedaijia-008@163.com
我急用,谢谢了。
lyl222 2008-09-24
  • 打赏
  • 举报
回复
楼主的问题搞定了吗?
可否分享一下,十分感谢了
我邮箱:lylbin@163.com
wulei_vincent 2008-02-03
  • 打赏
  • 举报
回复
WeifenLuo.WinFormsUI.DockContent //这是一个自定义组件,怎么都能贴出来?
huitian4210 2008-01-12
  • 打赏
  • 举报
回复
高啊
其实我也不知道!
miqier 2008-01-11
  • 打赏
  • 举报
回复
实惠点,直接上代码吧
两个PictureBox,一个显示原图pb_Shoot,一个显示框选的图pb_Photo

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace WindowsApplication1
{
public partial class Form2 : WeifenLuo.WinFormsUI.DockContent
{

int _RectangleX; //矩形框的左上顶点的X坐标
int _RectangleY; //矩形框的左上顶点的Y坐标

int _OldMouseX; //鼠标左键按下时的X点坐标
int _OldMouseY; //鼠标左键按下时的Y点坐标
int _NewMouseX; //鼠标移动时的X点坐标
int _NewMouseY; //鼠标移动时的Y点坐标

bool _Draging = false; //是否在拖拽状态
bool _HasDraw = false; //是否已经画过矩形

int _RectangleWidth; //选择区域的宽度
int _RectangleHeight; //选择区域的高度

Pen _Pen = new Pen(Color.LightBlue, 2);


[System.Runtime.InteropServices.DllImportAttribute("gdi32.dll")]
private static extern bool BitBlt(
IntPtr hdcDest, // handle to destination DC
int nXDest, // x-coord of destination upper-left corner
int nYDest, // y-coord of destination upper-left corner
int nWidth, // width of destination rectangle
int nHeight, // height of destination rectangle
IntPtr hdcSrc, // handle to source DC
int nXSrc, // x-coordinate of source upper-left corner
int nYSrc, // y-coordinate of source upper-left corner
System.Int32 dwRop // raster operation code
);


public Form2()
{
InitializeComponent();
}

private void Form2_Load(object sender, EventArgs e)
{
pb_Shoot.Image = Image.FromFile(@"C:\abc15.gif");
_RectangleWidth = pb_Photo.Width;
_RectangleHeight = pb_Photo.Height;

}

void InitFrame()
{
_RectangleX = pb_Shoot.Left + pb_Shoot.ClientRectangle.Width / 2 - _RectangleWidth / 2;
_RectangleY = pb_Shoot.Top + pb_Shoot.ClientRectangle.Height / 2 - _RectangleHeight / 2;

Graphics g = pb_Shoot.CreateGraphics();
g.DrawRectangle(_Pen, _RectangleX, _RectangleY, _RectangleWidth, _RectangleHeight);
g.Dispose();
GC.Collect();
}

Image InterceptImage()
{
Graphics g1 = this.pb_Shoot.CreateGraphics();
Image MyImage = new Bitmap(_RectangleWidth, _RectangleHeight, g1);

Graphics g2 = Graphics.FromImage(MyImage);
IntPtr dc1 = g1.GetHdc();
IntPtr dc2 = g2.GetHdc();
BitBlt(dc2, 0, 0, _RectangleWidth, _RectangleHeight, dc1, _RectangleX, _RectangleY, 13369376);
g1.ReleaseHdc(dc1);
g2.ReleaseHdc(dc2);

return MyImage;
}

private void pb_Shoot_MouseDown(object sender, MouseEventArgs e)
{
_OldMouseX = e.X;
_OldMouseY = e.Y;
}

private void pb_Shoot_MouseMove(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
_Draging = true;
}
else
{
if (!_HasDraw)
{
InitFrame();
_HasDraw = true;
}
}

_NewMouseX = e.X;
_NewMouseY = e.Y;

if (_Draging)
{
int _MoveX;
int _MoveY;

_MoveX = _NewMouseX - _OldMouseX;
_MoveY = _NewMouseY - _OldMouseY;

pb_Shoot.Refresh();

int _X = _RectangleX + _MoveX;
int _Y = _RectangleY + _MoveY;

Graphics g = pb_Shoot.CreateGraphics();
g.DrawRectangle(_Pen, _X, _Y, _RectangleWidth, _RectangleHeight);
g.Dispose();
GC.Collect();
}
}

private void pb_Shoot_MouseUp(object sender, MouseEventArgs e)
{
int _MoveX;
int _MoveY;

_MoveX = _NewMouseX - _OldMouseX;
_MoveY = _NewMouseY - _OldMouseY;

_RectangleX += _MoveX;
_RectangleY += _MoveY;

_Draging = false;
}

private void pb_Shoot_MouseEnter(object sender, EventArgs e)
{
if (!_Draging && !_HasDraw)
{
InitFrame();
}
}
}
}
zhangsfzgl 2008-01-11
  • 打赏
  • 举报
回复
我也想知道
蝶恋花雨 2008-01-11
  • 打赏
  • 举报
回复
没做过,想知道楼下的继续
随缘而聚 2008-01-11
  • 打赏
  • 举报
回复
各位帮帮忙了,谢谢了!急呀!
卧_槽 2008-01-11
  • 打赏
  • 举报
回复
我也想知道

111,089

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧