|
-------- -- --:--
新しい記事を書く事で広告が消せます。 |
|
2007-09-29 Sat 03:18
pythonでOpenGLでも使いましょうということで、
1.setuptoolsのインストール パッケージインストールツール。windows pythonにはデフォルトでインストール されていないのでインストールする必要がある。 PyOpenGLのインストールに必要である。 インストール方法: python-setuptoolsのセットアップファイルをダウンロード #wget http://peak.telecommunity.com/dist/ez_setup.py #python ./ez_setup.py 2.glutのインストール OpenGLを使用するためのライブラリ glut-3.7.6-bin.zipをダウンロードして、解凍する。 *dllを C:WINDOWSsystemへコピーする。 C:WINDOWSsystem32へコピーする。 3.PyOpenGLのインストール PyOpenGL-3.0.0a6.tar.gzをダウンロードして展開をする。 #cd PyOpenGL-3.0.0a6 #python setup.py install これでインストール完了。 4.pygameのインストール pygame-1.7.1release.win32-py2.5.exeをダウンロードして インストールする。 4はついでにインストールしましたw これでpythonでOpenGLが使えるようになります。 以下簡単なサンプル #!/usr/bin/python import sys from OpenGL.GL import * from OpenGL.GLU import * from OpenGL.GLUT import * init_flag = 0 def display(): global init_flag if not init_flag: glEnable( GL_LIGHTING ) glEnable( GL_LIGHT0 ) glEnable( GL_DEPTH_TEST ) init_flag = 1 glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT ) glPushMatrix() gluLookAt( 0,3,-10, 0,0,0, 0,1,0 ) glutSolidTeapot( 2 ) glPopMatrix() glFlush() def reshape(w,h): glViewport( 0, 0, w, h ) glMatrixMode( GL_PROJECTION ) glLoadIdentity() gluPerspective( 45.0, 1.0*w/h, 0.1, 100.0 ) glMatrixMode( GL_MODELVIEW ) glLoadIdentity() def keyboard(key,x,y): if key==chr(27): sys.exit(0) glutInit( sys.argv ) glutInitDisplayMode( GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH ) glutInitWindowSize( 256, 256 ) glutCreateWindow( 'teapot' ) glutReshapeFunc( reshape ) glutKeyboardFunc( keyboard ) glutDisplayFunc( display ) glutMainLoop() |
|
2007-09-22 Sat 03:58
C言語でファイルフォーマットチェック関数を簡単に作ってみました。
今後はファイルサイズなどもチェックできるように使用と思います。 JPEGフォーマットについて: http://siisise.net/jpeg.html#format int checkextent( char* chp_file ) { int in_cnt = 0; int in_ret = 0; char* chp_ret = NULL; char cha_buff[ BUFF_SIZE + 1]; FILE* fp = NULL; chp_ret =fgets( cha_buff, BUFF_SIZE , fp ); if ( *chp_ret = 0xFFFFFFFF && *(chp_ret+1) == 0xFFFFFFD8 ) { return JPEG_FORMAT; }else if ( *chp_ret == 'G' && *(chp_ret +1 ) == 'I' && *(chp_ret +2)== 'F' ) { return GIF_FORMAT; }else if ( *chp_ret == 0xFFFFFF89 && *(chp_ret +1 ) == 0x50 && *(chp_ret +2 ) == 0x4E && *(chp_ret +3 ) == 0x47 && *(chp_ret +4 ) == 0x0D && *(chp_ret +5 ) == 0x0A ) { chp_ret = fgets( cha_buff, BUFF_SIZE , fp ); if ( *(chp_ret ) ==0x1A && *(chp_ret +1 ) == 0x0A ) { return PNG_FORMAT; } } fclose( fp ); return NG; } |
|
2007-09-18 Tue 14:46
windowsから色々な場所へftp,telnetをしたくなる場合があるため、ちょっと調べてみました。
■FTPモジュールの使い方 基本的なftpモジュールの操作 結構primitiveなことができるため、ftpを覚えるという点からもよいかもしれない。 from ftplib import FTP ftp = FTP( SERVER ) ftp.login( USER , PASS ) ftp.cwd( PUT_PATH ) fp_up = open( i , "r" ) ftp.storlines( "STOR "+PUT_FILE , fp_up ) fp_up.close() ftp.close() ※FTPとかによく使う豆知識 現在のディレクトリを取得 import os print os.path.dirname(os.path.abspath(__file__)) ■telnetモジュールの使い方 これはまぁ、そのままです。 import telnetlib tn =telnetlib.Telnet( FUMIDAI ) response=tn.read_until( PROMPT[cnt] ) tn.write( WRITE_DATA[cnt]+ '\n' ) tn.close() |
|
2007-09-14 Fri 05:52
【アセンブラの勉強】
とりあえず、gcc -vでコンパイルの詳細情報を出力する。 # gcc -v sample.c Reading specs from /usr/lib/gcc-lib/i586-suse-linux/3.3.4/specs Configured with: ../configure --enable-threads=posix --prefix=/usr --with-local-prefix=/usr/local --infodir=/usr/share/info --mandir=/usr/share/man --enable-languages=c,c++,f77,objc,java,ada --disable-checking --libdir=/usr/lib --enable-libgcj --with-gxx-include-dir=/usr/include/g++ --with-slibdir=/lib --with-system-zlib --enable-shared --enable-__cxa_atexit i586-suse-linux Thread model: posix gcc version 3.3.4 (pre 3.3.5 20040809) /usr/lib/gcc-lib/i586-suse-linux/3.3.4/cc1 -quiet -v -D__GNUC__=3 -D__GNUC_MINOR__=3 -D__GNUC_PATCHLEVEL__=4 sample.c -quiet -dumpbase sample.c -auxbase sample -version -o /tmp/cclBAc0J.s GNU C version 3.3.4 (pre 3.3.5 20040809) (i586-suse-linux) compiled by GNU C version 3.3.4 (pre 3.3.5 20040809). GGC heuristics: --param ggc-min-expand=55 --param ggc-min-heapsize=48247 #include "..." search starts here: #include <...> search starts here: /usr/local/include /usr/lib/gcc-lib/i586-suse-linux/3.3.4/include /usr/i586-suse-linux/include /usr/include End of search list. /usr/lib/gcc-lib/i586-suse-linux/3.3.4/../../../../i586-suse-linux/bin/as -V -Qy -o /tmp/cco4tK3p.o /tmp/cclBAc0J.s GNU assembler version 2.15.91.0.2 (i586-suse-linux) using BFD version 2.15.91.0.2 20040727 (SuSE Linux) /usr/lib/gcc-lib/i586-suse-linux/3.3.4/collect2 --eh-frame-hdr -m elf_i386 -dynamic-linker /lib/ld-linux.so.2 /usr/lib/gcc-lib/i586-suse-linux/3.3.4/../../../crt1.o /usr/lib/gcc-lib/i586-suse-linux/3.3.4/../../../crti.o /usr/lib/gcc-lib/i586-suse-linux/3.3.4/crtbegin.o -L/usr/lib/gcc-lib/i586-suse-linux/3.3.4 -L/usr/lib/gcc-lib/i586-suse-linux/3.3.4/../../../../i586-suse-linux/lib -L/usr/lib/gcc-lib/i586-suse-linux/3.3.4/../../.. /tmp/cco4tK3p.o -lgcc --as-needed -lgcc_s --no-as-needed -lc -lgcc --as-needed -lgcc_s --no-as-needed /usr/lib/gcc-lib/i586-suse-linux/3.3.4/crtend.o /usr/lib/gcc-lib/i586-suse-linux/3.3.4/../../../crtn.o まとめると。 cc1、as、collect2を使ってコンパイルを行っている。 cc1はCのソースをアセンブラコードに落とし、asでアセンブラからオブジェクトコードに変換し, collect2はリンカでオブジェクトファイルをリンカなどで紐付ける。 もっとわかりやすくすると。 cc1 -quiet -v -D__GNUC__=3 -D__GNU_MINOR__=3 -D__GNU_PATCH_LEVEL__=4 sample.c -quiet -dumpbase sample.c -auxbase sample -version -o sample.s これは色々なマクロ変数を定義し、sample.cを元にsample.sを作成する 次にアセンブラコードを as -V -Qy -o sample.o sample.s これでオブジェクトファイルを作成。 collect2を使ってオブジェクトファイルから実行ファイルを作成する。 また、ldコマンドを実行しても同じことが作れる。 /usr/lib/gcc-lib/i586-suse-linux/3.3.4/collect2 --eh-frame-hdr -m elf_i386 -dynamic-linker /lib/ld-linux.so.2 /usr/lib/gcc-lib/i586-suse-linux/3.3.4/../../../crt1.o /usr/lib/gcc-lib/i586-suse-linux/3.3.4/../../../crti.o /usr/lib/gcc-lib/i586-suse-linux/3.3.4/crtbegin.o -L/usr/lib/gcc-lib/i586-suse-linux/3.3.4 -L/usr/lib/gcc-lib/i586-suse-linux/3.3.4/../../../../i586-suse-linux/lib -L/usr/lib/gcc-lib/i586-suse-linux/3.3.4/../../.. /tmp/cco4tK3p.o -lgcc --as-needed -lgcc_s --no-as-needed -lc -lgcc --as-needed -lgcc_s --no-as-needed /usr/lib/gcc-lib/i586-suse-linux/3.3.4/crtend.o /usr/lib/gcc-lib/i586-suse-linux/3.3.4/../../../crtn.o 最後のcollectはすっげーめんどくさい。 実際のコンパイルはこんなことをやっています。 次回はアセンブラコードを書いて、標準出力するサンプルを作ってみようかと。 |
|
2007-09-12 Wed 02:13
・PNGフォーマット
http://www.libpng.org/pub/png/spec/1.0/PNG-Contents.html ・JPEGフォーマット http://www.marguerite.jp/Nihongo/Labo/Image/JPEG2.html ・GIFフォーマット http://www.tohoho-web.com/wwwgif.htm#GIFAbout ハフマン符号: エントロピー符号化: ・JPEG 静止画像の圧縮する形式。基本的に不可逆。 符号化方式: 離散コサイン変換を用いて空間領域から周波数領域へ変換する。 変換データを量子化して、ハフマン符号を行い、圧縮することができる。 ノイズ: ブロック単位変換のため、圧縮率を上げると、ブロック境界にノイズが 現れる。これをモスキートノイズという。 周波数変換で低周波成分の画像エネルギーが集中しているため、高周波成分では エネルギーがゼロ。 画像は急激な変化を十分に表現できない。 赤は弱く画像を小さくすると、赤の部分でノイズが乗りやすい。 調べる単語: エントロピー符号化、ハフマン符号。 |
|
2007-09-11 Tue 03:11
ELFヘッダを見る方法:
readelf -h [オブジェクト] ELFのマジックナンバーは「177ELF」という文字列になっている。 ABI:Application Binary Interface ・プログラムヘッダ readelf -l sample ・セクションヘッダ readelf -S sample ・ストリングヘッダ ストリングヘッダが.shstrtabにあたるのでオフセットが0012f5、サイズが000158バイトのストリングテーブルがある。 od --skip-bytes 0x0012f5 --read-bytes 0x158 -t x1z sample ・シンボルテーブル readelf -s sample ELFヘッダから読み取ってみると。 シンボルテーブルとしては.dynsymがあることがわかる。 そしてダンプしてみると。 od --skip-bytes 0x0001ac --read-bytes 0x000060 -t x1z sample ・再配置情報 |
|
2007-09-06 Thu 02:23
gdImageCopyResized
とgdImageCopyResampled の比較。 Resizedのほうが画質が悪く感じられる。 gdImageCopyResampled: 四角形のイメージを別のイメージにコピーする際に使う関数。 スムーズにピクセル値を修正する。 イメージのサイズを減らす際にclarityを保つためである。 オリジナルとターゲットのX,Y座標は適度に領域を延ばしたり、 縮めたりする結果、変化させることが可能 ピクセル値を修正しない場合にはgdImageCopyResizedを見る。 gdImageCopyResized: 四角形をイメージから別のイメージへコピーすることができる。 オリジナル画像のX,Y座標とターゲット画像のX,Y座標を適度に 領域を延ばし縮みさせることで変化されることが可能。 イメージ間のコピーでの重要点: イメージは同じカラーテーブルをもっている必要はないので、 ピクセルはコピーするための同じカラーインデックスをセットしない。 gdImageCopyは同じRGB値をgdImageColorExactに頼って探そうとする。 しかし値が見つからなかった場合にはgdImageColorAllocateで使われたカラーでallocateしようとする。 書いてある内容からするとResampledを使ったほうがよさそうな気がする。 |
|
| ぽんたのブログ |
|
ブログ内検索
RSSフィード
リンク
Powered By FC2ブログ




