HDU之旅
现在开始逐渐地学一点关于ACM的东西。
慢慢地把自己的算法能力提高上去。
坚持每天做几道题。
都用C++解决。
Love if!
专注游戏服务器开发
HODJ1001SumProblemC++解法
1001
#include
using namespace std;
long int Sum(int a)
{
long int sum=0;
for(int i=1;i<=a;i++)
sum+=i;
return sum;
}
int main()
{
int a,b;
while(cin>>a)
{
cout<<Sum(a)<<endl<<endl;
//cout<<Sum(b);
}
}
发现自己英文菜菜的,居然看错题了,还以为是两个数字一起输入的呢,真是郁闷。
JMF天昏地暗之路(一)jmf无法检测到摄像头
这些天为了搞一个用java调用本地摄像头的小程序搞到心疲力尽。。。。。。。。。
首先是java这个坑货,jmf居然不支持windos64位系统,只好狠心把64位重装成了32位,jmf是可以支持了,可是其他问题又一大堆了,
网上一些参照的代码都是坑爹的,几乎都是一模一样,也不管能不能运行,抄了再说,对于这种人,我只想说,你妹啊,害死了多少人啊!我只希望看了我的这篇文章之后,大家在发文章的时候,最好自己亲测可行了之后再发上来,谢谢!!!!
这也让我萌生了要写一篇靠谱一点的关于JMF的文章,好了,先介绍一下我用的开发环境。
操作系统:windows7 32bit 旗舰版;
开发工具:Eclipse for java SE; jdk 1.7;
JMF 2.1.1e
这就是我的开发环境了,好了,先写到这里吧,其他的等下再写,我的那个小程序还没搞完,真是坑爹啊。
对了,还有重点忘了,JMF检测不到摄像头一般都是因为你的系统不是32位而是64位的,我就碰到过这种问题。如果你是想用JMF开发的话,只能是装32位的win7或者是Xp了。
或者你可以参照以下步骤,或许可以检测到:
打开JMStudio–>>file–>Preferences–>Capture Devices–>Detect Capture Device
这样就可以检测到了,再说一句,听说摄像头的驱动也有可能导致这种问题,我只是听说,因为在网上看了好多的文章,也不知道会不会,至少我的不会,好了,先到这里了,大家如果还有其他的疑问可以看我后面的连载或者直接留言给我,看到了我会回一下。
jmf天昏地暗之路(三)抓取当前帧照片并保存为bmp格式(结束)
断断续续弄了差不多两个星期,终于把这个弄好了,在我的电脑上以及朋友的xp系统上测试成功!
下面不多说,直接上代码。
说明:电脑必须装好jmf,并且用JMStudio能正常打开摄像头,否则运行不了,具体是什么原因我也不太清楚。
//已成功实现功能,获取当前摄像头并且拍照。
//照片存在E:\photo目录下
import java.awt.Component;
import java.awt.FlowLayout;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.RenderedImage;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Date;
import javax.media.Buffer;
import javax.media.CannotRealizeException;
import javax.media.CaptureDeviceInfo;
import javax.media.CaptureDeviceManager;
import javax.media.Manager;
import javax.media.MediaLocator;
import javax.media.NoPlayerException;
import javax.media.Player;
import javax.media.control.FrameGrabbingControl;
import javax.media.format.VideoFormat;
import javax.media.util.BufferToImage;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import com.sun.media.jai.codec.BMPEncodeParam;
import com.sun.media.jai.codec.ImageCodec;
import com.sun.media.jai.codec.ImageEncoder;
public class CapturePicture extends JFrame implements ActionListener{
private static CapturePicture jframe=new CapturePicture();
private JPanel showPhone=new JPanel();//用来接受摄像头数据
private JPanel bpanel=new JPanel();
private JButton button=new JButton(“拍照”);
//摄像头驱动
private CaptureDeviceInfo captureDeviceInfo=null;
private MediaLocator mediaLocator=null;
private static Player player=null;
private Buffer buffer=null;
private VideoFormat videoFormat=null;
private BufferToImage bufferToImage=null;
private Image image=null;
//构造器
private CapturePicture()
{
}
protected void Init()
{
jframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jframe.setBounds(200,100,600,600);
jframe.setVisible(true);
jframe.setTitle(“拍照小程序”);
jframe.setResizable(true);
jframe.setLayout(null);//绝对布局
jframe.add(showPhone);
jframe.add(bpanel);
bpanel.setBounds(0,500,100,100);
bpanel.setLayout(new FlowLayout(FlowLayout.CENTER,10,10));
bpanel.add(button);
button.addActionListener(this);
String str=”vfw:Microsoft WDM Image Capture (Win32):0”;
captureDeviceInfo=CaptureDeviceManager.getDevice(str);
mediaLocator=new MediaLocator(“vfw://0”);
try {
player=Manager.createRealizedPlayer(mediaLocator);
player.start();
Component comp;
if((comp=player.getVisualComponent())!=null)
comp.setBounds(0, 0, 700, 500);
this.add(comp);
} catch (NoPlayerException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (CannotRealizeException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//创建照片所用的文件夹
File photo=new File(“E:\\“,”photo”);
photo.mkdir();
}
public static CapturePicture getCP()
{
return jframe;
}
//获取照片
private void takePhoto()
{
//获取照片
FrameGrabbingControl fgc=(FrameGrabbingControl)player.getControl(“javax.media.control.FrameGrabbingControl”);
buffer=fgc.grabFrame();
bufferToImage=new BufferToImage((VideoFormat)buffer.getFormat());
image=bufferToImage.createImage(buffer);
OutputStream out=null;
Date date=new Date();
Long dtime=date.getTime();
try {
out=new FileOutputStream(“E:\\photo\\“+dtime+”.BMP”);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//可能是改参数的地方
BMPEncodeParam param = new BMPEncodeParam();
ImageEncoder enc = ImageCodec.createImageEncoder(“BMP”, out, param);
try {
enc.encode((RenderedImage) image);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
out.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void main(String args[])
{
CapturePicture cp=CapturePicture.getCP();
cp.Init();
}
@Override
public void actionPerformed(ActionEvent arg0) {
// TODO Auto-generated method stub
takePhoto();
}
}
JMF天昏地暗之路(二)打开摄像头并显示在屏幕上
上一篇文章我已经说了一些比较基本的东西了,现在我来说一下如何用java打开本地摄像头并将当前摄像头的图片显示在屏幕上。
我先把我写的一个测试代码发上来。
/**
* 这是一段打开摄像头并将当前图像显示出来的代码
* @author 天下无双由我
* @time 2013/12/15
* @location GDUT
* */
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Frame;
import javax.media.CaptureDeviceInfo;
import javax.media.CaptureDeviceManager;
import javax.media.Manager;
import javax.media.MediaLocator;
import javax.media.Player;
import javax.swing.JFrame;
public class openCamera extends JFrame{
//获取驱动,这段代码我也是在网上参考的
public static Player player=null;
private CaptureDeviceInfo di=null;
private MediaLocator ml=null;
//str1,str2是用来记录当前设备的字符号
private String str1;
private String str2;
public openCamera(){//是为了使图像显示出来弄的小界面
this.setVisible(true);
this.setBounds(200,200,300,300);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String args[]){
new openCamera().start();
}
public void start()
{
//视频设备的字符号,可以在JMStudio里面找到
str1 = “vfw:Logitech USB Video Camera:0”;
str2 = “vfw:Microsoft WDM Image Capture (Win32):0”;
di = CaptureDeviceManager.getDevice(str2);
ml = di.getLocator();
try
{
player = Manager.createRealizedPlayer(ml);
player.start();
Component comp;
if ((comp = player.getVisualComponent()) != null)
{
add(comp, BorderLayout.NORTH);
}
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
上面都有很详细的注释了,关于代码部分我就不多讲了,我就讲讲编译时候出现的问题吧。
首先你要保证你已经把JMF包导进了你的这个项目文件中,如果没有的话,就按照以下步骤导入jar包。
右键当前项目—->>Bulid Path—>Configure Bulid Path—>Libraries—->add External JAR
然后选择导入jmf中的所有jar包。
然后是编译了,要按下面的方法编译才行,不然有可能会出现一个问题,那就是
LINEAR, Unknown Sample Rate
* out *
LINEAR, 8000.0 Hz, 16-bit, Stereo, LittleEndian, Signed, class [S
未知的采样率问题,至于为什么会有这个问题,我也不清楚,网上很多人说是软件兼容性问题,我也不太清楚。
编译的时候,直接在当前项目目录下的src/(default package)上右键,选择Run AS/Java Application,这样这段代码才能正常运行,好了,直接上运行后的图吧。
本文的主要思路来源于CSDN的一篇文章,但是我现在找不到链接。我去。
先写到这里吧,我的任务还没有弄完呢,后面的以后再继续慢慢x写。
发表之后发现图片看不了,真是个坑!
linux下安装Qt52并测试一个例子
今天装了c++图形开发工具qt.
下面说说安装步骤吧。
我用的是fedora20,64bit.
第一步,肯定是下载qt啦。
下载网址:http://qt-project.org/downloads
最好到mirror(CN)最快了。
发现qt5.2的安装好像跟其他的不太一样。网上很多都说要重新编译,但是我暂时还没有发现。
下载之后,首先就是取得其权限啦。
chmod +x ./qt-linux-opensource-5.2.0-x86_64.run
然后呢,就可以使用
./qt-linux-opensource.run//这里的文件名自己改一下。
然后就会出现一个图形化的安装界面。
安装啦。
然后一直next下去行了。
然后你可以测试一下是否已经安装成功了。
New project->应用程序-》QT控制台程序->输入名称hello
然后在hello里面看到一个main.cpp
将里面的内容全部改为
#include <QtGui/QGuiApplication>
#include “qtquick2applicationviewer.h”
//
#include
#include
#include
//
int main(int argc, char *argv[])
{
QApplication app(argc,argv);
QDialog* dd = new QDialog();
QLabel* label = new QLabel(dd);
label->setText(“Hello QT”);
dd->show();
return app.exec();
}
而且因为5.2跟以前不太一样,在hello.pro文件里面的加上下面一句
QT+=widgets
然后ctrl+alt+b,构建完之后运行就可以看到屏幕上有一个小窗口
这样,就说明成功啦。
newchallenge
经过半个月左右的征程,成功砍下offer.
服务端C++开发,my love !
公司是刚从另一个大公司的一个团队独立出来的,属于创业初期的公司,正是我希望的,因为我可以和公司一起成长~~~
公司成长起来的时候,我也就是技术骨干啦~~~
梦想,加油!
OpenGL函数glClear
函数原型:
void glClear(GLbitfield mask);
参数说明:
GLbitfield:可以使用 运算符组合不同的缓冲标志位,表明需要清除的缓冲,例如glClear(GL_COLOR_BUFFER_BIT GL_DEPTH_BUFFER_BIT)表示要清除颜色缓冲以及深度缓冲,可以使用以下标志位
函数说明:
glClear()函数的作用是用当前缓冲区清除值,也就是glClearColor或者glClearDepth、glClearIndex、glClearStencil、glClearAccum等函数所指定的值来清除指定的缓冲区,也可以使用glDrawBuffer一次清除多个颜色缓存。比如:
glClearColor(0.0,0.0,0.0,0.0);
glClear(GL_COLOR_BUFFER_BIT);
第一条语句表示清除颜色设为黑色,第二条语句表示实际完成了把整个窗口清除为黑色的任务,glClear()的唯一参数表示需要被清除的缓冲区。
像素检验、裁剪检验、抖动和缓存的写屏蔽都会影响glClear的操作,其中,裁剪范围限制了清除的区域,而glClear命令还会忽略alpha函数、融合函数、逻辑操作、模板、纹理映射和z缓存;
缺失模块。
1、请确保node版本大于6.2
2、在博客根目录(注意不是yilia-plus根目录)执行以下命令:
npm i hexo-generator-json-content --save
3、在根目录_config.yml里添加配置:
jsonContent: meta: false pages: false posts: title: true date: true path: true text: false raw: false content: false slug: false updated: false comments: false link: false permalink: false excerpt: false categories: false tags: true