详细介绍Qt,ffmpeg 和SDl 教程之间的联系

Qtffmpeg SDl 教程是本文要介绍的内容,从多个角度介绍本文,运用了qmake,先来看内容。
1.  注释
从“ #” 开始,到这一行结束。
2.  指定源文件
1.           SOURCES = *.cpp  
对于多源文件,可用空格分开,如: SOURCES = 1.cpp 2.cpp3.cpp
或者每一个文件可以被列在一个分开的行里面,通过反斜线另起一行,就像这样 :
1.           SOURCES = hello.cpp   
2.                main.cpp  
一个更冗长的方法是单独地列出每一个文件,就像这样:
1.           SOURCES+= hello.cpp   
2.           SOURCES +=main.cpp  
这种方法中使用“ +=” 比“ =” 更安全,因为它只是向已有的列表中添加新的文件,而不是替换整个列表。
3.  指定头文件
HEADERS = hello.h 或者 HEADERS += hello.h
列出源文件的任何一个方法对头文件也都适用。
4.  配置信息
CONFIG 用来告诉 qmake 关于应用程序的配置信息。
1.           CONFIG+= qt warn_on release  
在这里使用“ +=” ,是因为我们添加我们的配置选项到任何一个已经存在中。这样做比使用“ =” 那样替换已经指定的所有选项是更安全的。
A> qt 部分告诉 qmake 这个应用程序是使用 Qt 来连编的。这也就是说 qmake 在连接和为编译添加所需的包含路径的时候会考虑到 Qt 库的。
B> warn_on 部分告诉 qmake 要把编译器设置为输出警告信息的。
C> release 部分告诉 qmake 应用程序必须被连编为一个发布的应用程序。在开发过程中,程序员也可以使用 debug 来替换 release
5.  指定目标文件名
1.           TARGET = filename  
如果不设置该项目,目标名会被自动设置为跟项目文件一样的名称
6.  添加界面文件 (ui)
1.           INTERFACES = filename.ui  
7.  平台相关性处理
我们在这里需要做的是根据 qmake 所运行的平台来使用相应的作用域来进行处理。为 Windows 平台添加的依赖平台的文件的简单的作用域看起来就像这样:
1.           win32 {   
2.           SOURCES += hello_win.cpp   
3.           }  
所以如果 qmake 运行在 Windows 上的时候,它就会把 hello_win.cpp 添加到源文件列表中。如果 qmake 运行在其它平台上的时候,它会很简单地把这部分忽略。
8.  如果一个文件不存在,停止 qmake
如果某一个文件不存在的 时候,你也许不想生成一个 Makefile 。我们可以通过使用 exists() 函数来检查一个文件是否存在。我们可以通过使用 error() 函数把正在运 行的 qmake 停下来。这和作用域的工作方式一样。只要很简单地用这个函数来替换作用域条件。对 main.cpp 文件的检查就像这样:
1.           !exists( main.cpp ) {   
2.             error( "No main.cpp file found")   
3.           }  
“!” 用来否定这个测试,比如,如果文件存在, exists( main.cpp) 是真,如果文件不存在, !exists( main.cpp ) 是真。
9.  检查多于一个的条件
假设你使用 Windows 并且当你在命令 行运行你的应用程序的时候你想能够看到 qDebug() 语句。除非你在连编你的程序的时候使用 console 设置,你不会看到输出。我们可以很容易地把 console 添加到 CONFIG 行中,这样在 Windows 下, Makefile 就会有这个设置。但是如果告诉你我们只是想在当我们的应用程序运行在 Windows 下并且当 debug 已经在 CONFIG 行中的时候,添加 console 。这需要两个嵌套的作用域;只要生成一个作用域,然后在它里面再生成 另一个。把设置放在最里面的作用域里,就像这样:
1.           win32 {   
2.             debug {   
3.                CONFIG += console   
4.             }   
5.           }  
嵌套的作用域可以使用冒号连接起来,像这样:
1.           win32:debug {   
2.           CONFIG += console   
3.           }  
10.  摸板
模板变量告诉 qmake 为这个应用程序生成哪种 makefile 。下面是可供使用的选择:
A> app - 建立一个应用程序的 makefile 。这是默认值,所以如果模板没有被指定,这个将被使用。
B> lib - 建立一个库的 makefile 。
C> vcapp - 建立一个应用程序的 VisualStudio 项目文件。
D> vclib - 建立一个库的 VisualStudio 项目文件。
E> subdirs - 这是一个特殊的模板,它可以创建一个能够进入特定目录并且为一个项目文件生成 makefile 并且为它调用 make 的 makefile 。
11、生成 Makefile
当你已经创建好你的项目文件,生成 Makefile 就很容易了,你所要做的就是先到你所生成的项目文件那里然后输入:
Makefile 可以像这样由“ .pro” 文件生成:
1.           qmake -oMakefile hello.pro  
对于 VisualStudio 的用户, qmake 也可以生成“ .dsp” 文件,例如:
1.           qmake -tvcapp -o hello.dsp hello.pro  
参考文档:详解 QT 中.pro文件的写法 
Qmake 不仅仅只用于QT其他地方也用到了,根据模板的值可以生成app,lib,vclib等待makefile文件
(2)声明其他的库
如果你需要在工程中使用其他的库 , 需要在工程文件里面指定
让 qmake 找到库的路径和相应需要连接的库 , 可以在 LIBS 变量里面添加 . 库的路径要给出 , 或者常见的 unix 样式的符号来指定库和库的路径
例如下面的展示了如何使用指定的库
1.           LIBS += -L/usr/local/lib -lmath  
可以用类似的方法来指定头文件的路径 , 不过是使用 INCLUDEPATH 变量 , 如下面可能添加好几个头文件的路径
1.           INCLUDEPATH = c:/msdev/include d:/stl/include  
不过我的习惯是下面这样的 , 比较清晰还有 , 最好 windows 的路径不要有空格 , 中文也不要有 , 斜杠也推荐用 / 而不是 windows 的 \ 因为跟分行符号 \ 相同了 / 可以在 unix 和 windows 用 , 但是 \ 貌似到了 unix 或 linux 就不行了 , 所以用 / 是通用的
1.           INCLUDEPATH = c:/msdev/include \   
2.                                       d:/stl/include  
见别人是这样添加到
在 .pro文件中添加LIBS += -lavformat  -lavcodec -lavutil lz -lavutil -lm `sdl-config --cflags --libs`
(3)因为ffmpeg是c程序,所以在编译的时候需要在头文件中加入
1.           extern "C" {  
2.           #include <ffmpeg/avcodec.h> 
3.           #include <ffmpeg/avformat.h> 
4.           }  
注:这里的C是大写。我之前好久没动手编程,这也查了蛮久,打击自信心啊!!!!
解释如下:
1、extern 是 C/C++ 语言中表明函数和全局变量作用范围(可见性)的关键字,该关键字告诉编译器其声明的函数和变量可以在本模块或其它模块中使用;
2、与 extern 对应的关键字是 static ,被它修饰的全局变量和函数只能在本模块中使用。因此,一个函数或变量只可能被本模块使用时,其不可能被 extern “C” 修饰;
3、被 extern "C" 修饰的变量和函数是按照 C 语言方式编译和连接的;
4、C编译器和c++编译器对函数的翻译不一样,如:int  root(int a,int b);c对应的是_root,c++对应的是_root_int_int,因为c不支持重载而c++支持,因此需要识别函数的参数。
(4)直接运行可执行文件出现缺少minwm10.dll错误提示,将D:\Qt\2009.05\mingw\bin;D:\Qt\2009.05\qt\bin添加到环境变量就可以了。
(5)因为现在比较熟悉opencv,就用opencv+qt尝试qt连接库
1.           INCLUDEPATH +=   C:\OpenCV\cv\include \  
2.             C:\OpenCV\cvaux\include \  
3.             C:\OpenCV\cxcore\include \  
4.             C:\OpenCV\otherlibs\highgui  
5.           LIBS +=   C:\OpenCV\lib\cv.lib \  
6.             C:\OpenCV\lib\cvaux.lib \  
7.             C:\OpenCV\lib\cxcore.lib \  
8.             C:\OpenCV\lib\highgui.lib \  
程序可以编译运行,但是出现could not initialize ole的错误,不知道该怎么解决,在网上没查到有用的信息 !以后用的时候再解决这个问题,反正现在也可以编译了。
(6)接着用同样的方法改下.pro文件,添加头文件和库文件
1.           INCLUDEPATH +=   
2.            
3.                          D:\Qt\2009.05\ffmpeg\include\libavcodec \  
4.                          D:\Qt\2009.05\ffmpeg\include\libavdevice \  
5.                          D:\Qt\2009.05\ffmpeg\include\libavfilter \  
6.                          D:\Qt\2009.05\ffmpeg\include\libavformat \  
7.                          D:\Qt\2009.05\ffmpeg\include\libavutil \  
8.                          D:\Qt\2009.05\ffmpeg\include\libswscale \  
9.                          D:\Qt\2009.05\ffmpeg\include \  
10.       LIBS +=   
11.        
12.       D:\Qt\2009.05\ffmpeg\lib\avcodec.lib \  
13.       D:\Qt\2009.05\ffmpeg\lib\avdevice.lib \  
14.       D:\Qt\2009.05\ffmpeg\lib\avfilter.lib \  
15.       D:\Qt\2009.05\ffmpeg\lib\avformat.lib \  
16.       D:\Qt\2009.05\ffmpeg\lib\avutil.lib \  
17.       D:\Qt\2009.05\ffmpeg\lib\swscale.lib \  
(7)添加Sdl库
同理在文件中添加
1.           D:\Qt\2009.05\SDL\include \   
2.           D:\Qt\2009.05\SDL\lib\SDL.lib \  
3.           D:\Qt\2009.05\SDL\lib\SDLmain.lib \  
并加入头文件
1.           #include <SDL.h> 
2.           #include <SDL_thread.h>  
编译会出现一个错误
1.           undefined reference to `qMain(int, char**)'  
这是因为sdl中的 SDL _main.h已经定义了main,加上#undef main就可以解决了
(8)在av_register_all();时遇到 exited with code -1073741515错误
这是因为ffmpeg没有配置好,出现这个错误的原因是没有找到dll,dll一般是放在C:\WINDOWS\system32目录下的,我把他ffmpeg的库,复制到该目录下就ok了 ×— —×
(9)将tutorial02.c的代码改改,如下:
1.           #include <QtGui/QApplication> 
2.           #include "mainwindow.h"  
3.           #include <stdio.h> 
4.           #include <QLabel> 
5.           #include <QWidget>   
6.            
7.           extern "C"{  
8.           #include <avcodec.h> 
9.           #include <avformat.h> 
10.       #include <swscale.h> 
11.       #include <SDL.h> 
12.       #include <SDL_thread.h> 
13.       }   
14.        
15.       #ifdef __MINGW32__  
16.       #undef main /* Prevents SDL from overriding main() */  
17.       #endif   
18.        
19.       int main(int argc, char *argv[])  
20.       {   
21.            QApplication a(argc, argv);   
22.        
23.            AVFormatContext *pFormatCtx;  
24.            int             i, videoStream;  
25.            AVCodecContext  *pCodecCtx;  
26.            AVCodec         *pCodec;  
27.            AVFrame         *pFrame;  
28.            AVPacket        packet;  
29.            int             frameFinished;  
30.            float           aspect_ratio;  
31.            static struct   SwsContext *img_convert_ctx;  
32.            static int sws_flags = SWS_BICUBIC;   
33.        
34.            SDL_Overlay     *bmp;  
35.            SDL_Surface     *screen;  
36.            SDL_Rect        rect;  
37.            SDL_Event       event;   
38.        
39.            MainWindow w;  
40.            QLabel *frame_pre;  
41.            frame_pre = new QLabel;  
42.            QWidget *widget_player;  
43.            widget_player = new QWidget();  
44.            widget_player->setAttribute(Qt::WA_PaintOnScreen);  
45.            widget_player->setAttribute(Qt::WA_NoSystemBackground);  
46.            widget_player->show();  
47.            w.show();  
48.            frame_pre->show();   
49.        
50.            av_register_all();   
51.        
52.           /*set sdl env*/  
53.           char variable[64];  
54.           #ifdef Q_OS_WIN  
55.           sprintf(variable, "SDL_WINDOWID=0x%lx", widget_player->winId());  
56.           #else  
57.           sprintf(variable, "SDL_WINDOWID=0x%lx", this->winId());  
58.           #endif  
59.           putenv(variable);   
60.        
61.           if(SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO | SDL_INIT_TIMER)) {  
62.               fprintf(stderr, "Could not initialize SDL - %s\n", SDL_GetError());  
63.               exit(1);  
64.             }   
65.        
66.           // Open video file  
67.           if(av_open_input_file(&pFormatCtx, "D:\\Flyhigh.wmv", NULL, 0, NULL)!=0)  
68.             return -1; // Couldn't open file   
69.        
70.           // Retrieve stream information  
71.           if(av_find_stream_info(pFormatCtx)<0)  
72.              return -1; // Couldn't find stream information   
73.        
74.           // Dump information about file onto standard error  
75.           dump_format(pFormatCtx, 0, "D:\\Flyhigh.wmv", 0);   
76.        
77.           // Find the first video stream  
78.           videoStream=-1;  
79.           for(i=0; i<pFormatCtx->nb_streams; i++)  
80.               if(pFormatCtx->streams[i]->codec->codec_type==CODEC_TYPE_VIDEO) {  
81.                 videoStream=i;  
82.                 break;  
83.               }  
84.           if(videoStream==-1)  
85.                return -1; // Didn't find a video stream   
86.        
87.           // Get a pointer to the codec context for the video stream  
88.           pCodecCtx=pFormatCtx->streams[videoStream]->codec;   
89.        
90.           // Find the decoder for the video stream  
91.           pCodec=avcodec_find_decoder(pCodecCtx->codec_id);  
92.             if(pCodec==NULL) {  
93.               fprintf(stderr, "Unsupported codec!\n");  
94.               return -1; // Codec not found  
95.             }   
96.        
97.           // Open codec  
98.           if(avcodec_open(pCodecCtx, pCodec)<0)  
99.             return -1; // Could not open codec   
100.    
101.       // Allocate video frame  
102.       pFrame=avcodec_alloc_frame();   
103.    
104.       // Make a screen to put our video  
105.       #ifndef __DARWIN__  
106.               screen = SDL_SetVideoMode(pCodecCtx->width, pCodecCtx->height, 0, 0);  
107.       #else  
108.               screen = SDL_SetVideoMode(pCodecCtx->width, pCodecCtx->height, 24, 0);  
109.       #endif  
110.       if(!screen) {  
111.           fprintf(stderr, "SDL: could not set video mode - exiting\n");  
112.           exit(1);  
113.         }   
114.    
115.       // Allocate a place to put our YUV image on that screen  
116.       bmp = SDL_CreateYUVOverlay(pCodecCtx->width,  
117.                                          pCodecCtx->height,  
118.                                          SDL_YV12_OVERLAY,  
119.                                          screen);   
120.    
121.       // Read frames and save first five frames to disk  
122.       i=0;   
123.    
124.       while(av_read_frame(pFormatCtx, &packet)>=0) {  
125.       // Is this a packet from the video stream?  
126.       if(packet.stream_index==videoStream) {  
127.       // Decode video frame  
128.       avcodec_decode_video(pCodecCtx, pFrame, &frameFinished,  
129.                                      packet.data, packet.size);  
130.       // Did we get a video frame?  
131.       if(frameFinished) {  
132.                         SDL_LockYUVOverlay(bmp);  
133.                         AVPicture *pict;  
134.                         pict = new AVPicture;  
135.                         pict->data[0] = bmp->pixels[0];  
136.                         pict->data[1] = bmp->pixels[2];  
137.                         pict->data[2] = bmp->pixels[1];   
138.    
139.                         pict->linesize[0] = bmp->pitches[0];  
140.                         pict->linesize[1] = bmp->pitches[2];  
141.                         pict->linesize[2] = bmp->pitches[1];   
142.    
143.                         // Convert the image into YUV format that SDL uses  
144.                         if (pCodecCtx->pix_fmt == PIX_FMT_YUV420P) {  
145.                         /* as we only generate a YUV420P picture, we must convert it  
146.                           to the codec pixel format if needed */  
147.                         img_convert_ctx = sws_getContext(pCodecCtx->width, pCodecCtx->height,  
148.                                                                 pCodecCtx->pix_fmt,  
149.                                                                  pCodecCtx->width, pCodecCtx->height,  
150.                                                                  PIX_FMT_YUV420P,  
151.                                                                  sws_flags, NULL, NULL, NULL);  
152.                             if (img_convert_ctx == NULL) {  
153.                                  fprintf(stderr, "Cannot initialize the conversion context\n");  
154.                                  exit(1);  
155.                                  }  
156.                             sws_scale(img_convert_ctx, pFrame->data, pFrame->linesize,  
157.                                              0, pCodecCtx->height, pict->data, pict->linesize);  
158.                           }  
159.   //                    img_convert(&pict, PIX_FMT_YUV420P,  
160.   //                                (AVPicture *)pFrame, pCodecCtx->pix_fmt,  
161.   //                                pCodecCtx->width, pCodecCtx->height);  
162.                         SDL_UnlockYUVOverlay(bmp);  
163.                         rect.x = 0;  
164.                         rect.y = 0;  
165.                         rect.w = pCodecCtx->width;  
166.                         rect.h = pCodecCtx->height;  
167.                         SDL_DisplayYUVOverlay(bmp, &rect);  
168.                       }  
169.             }   
170.                     // Free the packet that was allocated by av_read_frame  
171.                     av_free_packet(&packet);  
172.                     SDL_PollEvent(&event);  
173.                     switch(event.type) {  
174.                     case SDL_QUIT:  
175.                       SDL_Quit();  
176.                       exit(0);  
177.                       break;  
178.                       default:  
179.                       break;  
180.                     }   
181.        }  
182.        // Free the YUV frame  
183.        av_free(pFrame);   
184.    
185.        // Close the codec  
186.        avcodec_close(pCodecCtx);   
187.    
188.        // Close the video file  
189.        av_close_input_file(pFormatCtx);  
190.        return a.exec();  
191.   
就可以看到图像了,哈哈。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/434155.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何生成JAR包

JDK中自带了jar命令&#xff0c;可以生成jar包&#xff0c;在命令行输入jar可以看到用法。 E:\20121008>jar用法: jar {ctxui}[vfm0Me] [jar-file] [manifest-file] [entry-point] [-C dir] files ...选项包括&#xff1a; -c 创建新的归档文件 -t 列出归档目录 …

java 匿名内部类 百科_java匿名内部类具体概念是什么,在什么地方用到?

展开全部java匿名内部类一定是在new的后面&#xff0c;用其隐含实现一个接口或实现一个类&#xff0c;没有类名&#xff0c;根据多态&#xff0c;我们e69da5e887aa62616964757a686964616f31333337613863使用其父类名。因他是局部内部类&#xff0c;那么局部内部类的所有限制都对…

python 元组 列表 字典区别_python编程:常用的数据结构之字典的方法总结,和列表和元组区别...

字典是一种键&#xff1a;值的形式&#xff0c;我们前面分享的文章学习了列表[],元祖&#xff08;&#xff09;&#xff0c;字典是由{}引起来的&#xff0c;列表的键对应的是列表的下标&#xff0c;而字典的值对应的是字典的键&#xff0c;我们可以通过字典的键来获取字典的值 …

ubuntu11.10中配置OGRE1.8

在这里提到的版本有点低&#xff0c;但对于Ubuntu11.10Ogre1.8照样适用。 对于Ubuntu 9.10及以上版本&#xff1a; 安装编译器及配置工具&#xff1a; sudo apt-get install build-essential automake libto 安装必须的依赖&#xff1a; sudo apt-get install libfreetype6-dev…

java 录音_用JAVA实现不限时录音功能

在网上找了个录音软件&#xff0c;而且这个软件是根据手机里剩余内存的大小&#xff0c;可以进行不限时录音&#xff0c;所以特地拿上来和大家分享&#xff01;这个JAVA软件我发到了“玩转手机”里。解压缩后&#xff0c;大家可以用MIDway_2.8中文&#xff0c;通过数据线上传到…

MinGw+Msys搭建环境 编译ffmpeg

MinGW:一个可自由使用和自由发布的Windows特定头文件和使用GNC工具集导入库的集合&#xff0c;允许你生成本地的Windows程序而不需要第三方C运行时 MinGW&#xff0c;即 Minimalist GNU For Windows。它是一些头文件和端口库的集合&#xff0c;该集合允许人们在没有第三方动态链…

redis 多线程_唬人的Redis多线程,也就那么回事

不羡鸳鸯不羡仙&#xff0c;一行代码调半天。原创&#xff1a;小姐姐味道&#xff08;微信公众号ID&#xff1a;xjjdog&#xff09;&#xff0c;欢迎分享&#xff0c;转载请保留出处。周末被一位小同学憋的很窝火。 他要和我探讨一下&#xff0c;redis到底是多线程的还是单线程…

关于客户端无法获得服务器端GP服务(Geoprocessing Service)结果的解决办法

之前发布了一个绘制等值面的服务&#xff0c;在本机测试的时候始终都可以访问&#xff0c;没有任何的问题&#xff0c;但是在远程访问时&#xff0c;出现了无法获得GP服务结果(注&#xff1a;结果为图片)的问题&#xff0c;而在服务器端确实生成了正确的结果。困扰了很久之后&a…

java 过滤器 中文_JAVA中文乱码过滤器(用java过滤器解决中文乱码)V0422 整理版

JAVA中文乱码过滤器(用java过滤器解决中文乱码)V0422 整理版不用再担心java中文乱码问题&#xff0c;一步到位&#xff0c;一次性解决。更方便更快捷。web-xml配置EncodingFiltercom.epet.util.EncodingFilterencodingGBKignoretrueEncodingFilter/*用java过滤器解决中文乱码哎…

ffmpeg 新老接口问题及对照集锦

ffmpeg源码包里面有个apichangs文档&#xff0c;里面有各种接口改变的记录&#xff0c;如果你发现接口不能用了&#xff0c;可以去搜索那个文档&#xff0c;可以找到对应的新接口&#xff0c;然后到新接口对应的头文件中找到说明文字 网上很多关于ffmpeg (libav)的资料都是N年…

c++界面开发_QT开发(三)——GUI原理分析

一、命令行程序命令行程序是面向过程的程序设计。命令行程序的特点&#xff1a;A、基于顺序结构执行B、程序执行过程中不需与用户交互C、程序执行结束给出最终运行结果命令行程序适用场合&#xff1a;A、单任务场合B、无交互、简单交互场合C、服务器应用场合二、GUI程序GUI程序…

[Ubuntu] Simple way to pass passwords on a shell script

here is the code for example: #!/bin/bashecho -e "your_password\nyour_password" | sudo /home/davidhhuan/the_shell_you_want_to_run.sh转载于:https://www.cnblogs.com/davidhhuan/archive/2012/11/12/2765983.html

解决链接错误:error LNK2001: 无法解析的外部符号 __iob

该错误主要是由于静态库在VC6编译而主程序在VC2005编译&#xff0c;大家用的CRT不同。解决办法&#xff0c;代码中增加 #ifdef __cplusplus extern "C" #endif FILE _iob[3] {__iob_func()[0], __iob_func()[1], __iob_func()[2]}; 此错误的产生根源&#xff1a; 在…

pycharm使用_后端开发使用pycharm的技巧

1、使用说明首先说明&#xff0c;本文所使用的功能为pycharm专业版所支持&#xff0c;其他版本如社区版&#xff0c;教育版&#xff0c;则不一定支持。作为一名后端开发&#xff0c;我猜你的桌面上一定打开着一系列的软件&#xff0c;用作开发调试工具&#xff0c;比如navicat数…

关于javafx支持IOS、android等智能手机解决方案

这两天回到javafx社区逛了一下&#xff0c;发现对这个问题讨论很多... 看完后&#xff0c;有两种意见。 第一种&#xff1a;是主流的&#xff0c;包括javafx社区以及绝大部分oracle内部javafx开发人员的意见&#xff1a;应该要支持&#xff0c;而且想把这个事情加入roadmap&…

java视窗_java-预览窗口(如Windows 7任务栏显示已打开的...

一个极其简单的实现.import java.awt.*;import java.awt.image.*;import java.awt.event.*;import javax.swing.*;class ShowPreviews {class ToolTipListener extends MouseAdapter {JWindow toolTip;JLabel label;Component preview;ToolTipListener(Component preview) {thi…

linux(ubuntu)下分区和格式化sd卡

我的手机sd卡需要分成两个分区&#xff0c;在windowxp下面死活搞不成。主要的问题是&#xff0c;window只认识sd卡的第一个分区。有人用修改驱动程序&#xff0c;让windows把sd卡认成日立的microdisk&#xff0c;分区和格式化也可以完成。但是在我的笔记本上&#xff0c;sd读卡…

@value 静态变量_Java中的变量——通过示例学习Java编程(4)

作者&#xff1a;CHAITANYA SINGH来源&#xff1a;通过示例学习Java编程&#xff08;4&#xff09;&#xff1a;Java中的变量-方家话题​www.koofun.com变量是用来存放可以更改的值的容器。例如&#xff0c;当我写int i 10; 这里变量名是i&#xff0c;它与值10相关联&#xff…

nmf算法 python_NMF算法简介及python实现

[ pca算法用于原始数据维数较高时对数据进行降维 关于pca算法的学习&#xff0c;有一篇分析特别详细的论文http://www.cs.otago.ac.nz/cosc453/student_tutorials/principal_componen基本原理NMF&#xff0c;非负矩阵分解&#xff0c;它的目标很明确&#xff0c;就是将大矩阵分…

linux 修改消息队列大小

环境&#xff1a;red hat5 linux消息队列的配置文件为&#xff1a; /etc/sysctl.conf ,里面&#xff1a; msgmax:  一条最大消息的字节数 msgmnb&#xff1a; 一个消息队列总共最大字节数 而我的系统这2个值都默认是65536&#xff0c;假如发一条65536长度的消息&#xff0c;…