青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

VC++ C++ C# Algorithm

C++博客 首頁 新隨筆 聯系 聚合 管理
  21 Posts :: 3 Stories :: 31 Comments :: 0 Trackbacks

#

SDL本身只支持加載BMP文件,如果你想顯示其他類型的圖像文件,就要用到擴展類庫,擴展類庫里面還有其他一些組件,你可以在這里下載到 http://www.libsdl.org/projects/SDL_image/
下載完以后,按照教程一配置,我們就可以顯示一張PNG圖片了。
以下是具體的代碼,與教程二很相似,如有疑問請參考教程二。
#include?
" SDL.h "

#include?
< SDL_image.h >
#include?
< string >
SDL_Surface?
* screen;
SDL_Surface?
*
background;
SDL_Surface?
* load_image(?std:: string
?filename?)?
{
????
// The?image?that's?loaded

????SDL_Surface * ?loadedImage? = ?NULL;

????
// The?optimized?image?that?will?be?used

????SDL_Surface * ?optimizedImage? = ?NULL;

????
// Load?the?image?using?SDL_image

????loadedImage? = ?IMG_Load(?filename.c_str()?);

????
// If?the?image?loaded

???? if (?loadedImage? != ?NULL?)
????
{
????????
// Create?an?optimized?image

????????optimizedImage? = ?SDL_DisplayFormat(?loadedImage?);

????????
// Free?the?old?image

????????SDL_FreeSurface(?loadedImage?);
????}


????
// Return?the?optimized?image
???? return ?optimizedImage;
}

void ?apply_surface( int ?x, int ?y,SDL_Surface? * source?,SDL_Surface? * destinaion)
{
????SDL_Rect?rect;
????rect.x
=
x;
????rect.y
=
y;
????SDL_BlitSurface(source,NULL,destinaion,
&
rect);

}

int ?main(? int ?argc,? char * ?args[]?)
{
????
// Start?SDL

????SDL_Init(?SDL_INIT_EVERYTHING?);

????
// Quit?SDL

????screen = SDL_SetVideoMode( 640 , 480 , 32 ,SDL_SWSURFACE);
????background
= load_image( " Dockxrt5.jpg "
);

????apply_surface(
0 , 0
,background,screen);

????
if (SDL_Flip(screen) ==- 1
)
????????
return ? - 1
;
????SDL_FreeSurface(background);
????SDL_Delay(
2000
);
????SDL_FreeSurface(background);
????SDL_Quit();

????
return ? 0
;????
}

以下代碼用SDL_TTF擴展類庫加載一個TTF字體文件,并用該字體顯示一段文字。
?1 #include? " SDL.h "
?2 #include? < SDL_ttf.h >
?3 #include? < string >
?4 SDL_Surface? * screen;
?5 SDL_Surface? *
background;
?6 void ?apply_surface( int ?x, int ?y,SDL_Surface? * source?,SDL_Surface? *
destinaion)
?7
{
?8
????SDL_Rect?rect;
?9 ????rect.x =
x;
10 ????rect.y =
y;
11 ????SDL_BlitSurface(source,NULL,destinaion, &
rect);
12

13 }

14 int ?main(? int ?argc,? char * ?args[]?)
15
{
16 ???? // Start?SDL

17
18 ????SDL_Init(?SDL_INIT_EVERYTHING?);
19 ???? if (TTF_Init() ==- 1
)
20 ???????? return ? - 1
;
21 ????TTF_Font? * font =
NULL;
22 ????font = TTF_OpenFont( " verdana.ttf " , 14
);
23 ???? if (font? ==
?NULL)
24 ???????? return ? - 1
;
25

26 ???? // Quit?SDL

27 ????SDL_Color?textColor = { 255 , 255 , 255 } ;
28 ????SDL_Color?textBgColor = { 0 , 0 , 0 ,}
;
29 ????screen = SDL_SetVideoMode( 640 , 480 , 32
,SDL_SWSURFACE);
30 ????background = TTF_RenderText_Blended(?font,? " why?it?can?not?display?chinese "
,?textColor);
31

32 ????apply_surface( 0 , 0
,background,screen);
33

34 ???? if (SDL_Flip(screen) ==- 1
)
35 ???????? return ? - 1
;
36

37 ????SDL_Delay( 100000
);
38
????SDL_Quit();
39

40 ???? return ? 0
;????
41 }

42
posted @ 2007-03-05 22:30 大熊貓 閱讀(3478) | 評論 (4)編輯 收藏

?

我們可以把表面想象成一張畫布, blit 表面就是把一個表面的某個區域 COPY 到另外一個表面上去。

//The headers

#include " SDL.h"

#include <string>

以上就是我們需要的頭文件了。

//The attributes of the screen

const int SCREEN_WIDTH = 640;

const int SCREEN_HEIGHT = 480;

const int SCREEN_BPP = 32;

3 個描述屏幕屬性的變量

SCREEN_BPP 是顏色深度,就是每個象素用多少為來表示,我們這里用 4 個字節。

//The surfaces that will be used

SDL_Surface *message = NULL;

SDL_Surface *background = NULL;

SDL_Surface *screen = NULL;

接著我們又定義了 3 個表面,一個用于顯示背景,一個用于顯示 Hello World ,還有一個當然是代表屏幕了。

SDL_Surface *load_image( std::string filename )

{

??? //Temporary storage for the image that's loaded

??? SDL_Surface* loadedImage = NULL;

???

??? //The optimized image that will be used

SDL_Surface* optimizedImage = NULL;

好了,我們可以寫一個自己的圖像裝載函數,該函數負責 Load 圖片,并返回一個經過優化的表面,當然圖片已經在表面上了。

//Load the image

??? loadedImage = SDL_LoadBMP( filename.c_str() );

首先我們使用 SDL_LoadBMP() 函數 Load 一張 BMP 格式的圖片。應為位圖是 24 位,所以我們不應該立即使用該表面,因為屏幕是 32 位的。如果在二各具有不同 format 表面進行 Blit ,那么 SDL 將會不停地進行格式之間的轉換,程序就會變得很慢。 .

?

??? if( loadedImage != NULL )

??? {

??????? //Create an optimized image

?? ?????optimizedImage = SDL_DisplayFormat( loadedImage );

???????

??????? //Free the old image

??????? SDL_FreeSurface( loadedImage );

}

以上幾行代碼檢查了圖片是否被正確加載了,如果有錯誤的話,那么 loadedImage 將是 NULL 。

SDL_DisplayFormat() 用于創建一個和屏幕表面相同格式的 Surface 。之所以這樣做就是為了加快程序速度,避免 SDL 類庫在對二個不同格式表面進行 Blit 時進行格式轉換。

?

好了,現在我們擁有二個表面了,一個上面有圖片,還有一個是前一個經過格式轉換得到的。

?

displayformat.jpg
freesurface.jpg

?

因為第一表面我們不需要了,所以我們就要釋放掉, SDL_FreeSurface() 函數就是干這件事情的。

??? //Return the optimized image

??? return optimizedImage;

}

好了,我們返回經過優化的表面。

void apply_surface( int x, int y, SDL_Surface* source, SDL_Surface* destination )

{

??? //Make a temporary rectangle to hold the offsets

??? SDL_Rect offset;

???

??? //Give the offsets to the rectangle

??? offset.x = x;

offset.y = y;

接下來,我們再寫一個 Blit 函數。 X,Y 是目標表面的偏移量,另外二個自然是要進行 Blit 的二個表面了。

首先我們把偏移量塞入到一個 SDL_Rect 變量里面,這樣做的原因很簡單,就是 SDL_BlitSurface 只接受 SDL_Rect 結構中的偏移。

SDL_Rect 結構代表一個長方形 . 它有四個成員,左上角的坐標,長和寬。

??? //Blit the surface

??? SDL_BlitSurface( source, NULL, destination, &offset );

}

好了,調用 SDL_BlitSurface 實現 Blit 。第二個參數是源表面的要被 Blit 的區域,我們用 NULL 表示要對整個源表面進行 Blit 。

int main( int argc, char* args[] )

{

??? if( SDL_Init( SDL_INIT_EVERYTHING ) == -1 )

??? {

??????? return 1;???

??? }

SDL_Init() 函數中,我們使用 SDL_INIT_EVERYTHING 參數,表示我們希望啟動所有 SDL 子系統,其中包括,視頻,聲音,時間,以及其他一些制作游戲所用到的組建。

?? screen = SDL_SetVideoMode( SCREEN_WIDTH, SCREEN_HEIGHT, SCREEN_BPP, SDL_SWSURFACE );

現在我們用 SDL_SetVideoMode 函數新建一個窗口,它返回一個指向窗口表面的指針,這樣我們就可以把圖像往屏幕上 Blit 了。

?

??? if( screen == NULL )

??? {

??????? return 1;???

??? }

如果函數有問題的話,就返回 NULL 。下面我們也可以改變一下窗口的標題。 ??? SDL_WM_SetCaption( "Hello World", NULL );

?? message = load_image( "hello_world.bmp" );

?? background = load_image( "background.bmp" );

?? apply_surface( 0, 0, background, screen );

現在我們把背景 Blit 到屏幕上,在 Blit 背景之前,窗口是黑色,如下圖。

?blank.jpg

?

再這之后,窗口的背景就改變了。
background.jpg

用同樣的方法,我們把 message Blit 到屏幕上去。

apply_surface( 180, 140, message, screen );

?

??? if( SDL_Flip( screen ) == -1 )

??? {

??????? return 1;???

??? }

雖然我們把背景表面和消息表面都 Blit 到屏幕表面上去了,窗口還是一片漆黑,因為我們沒有調用 SDL_Flip 函數來更新窗口,記住,屏幕表面是建立在系統內存當中的。

? SDL_Delay( 2000 );

好了,讓窗口停頓二秒,以免我們什么也不到。

??? //Free the surfaces

??? SDL_FreeSurface( message );

??? SDL_FreeSurface( background );

???

??? //Quit SDL

??? SDL_Quit();

???

??? //Return

??? return 0;

}

好了,我們的主函數也寫完了,最后我釋放了二個表面,并調用了 SDL_Quit 函數,清理我們所使用到其他資源。

?

好了,運行一下程序,你不意外你就能看到如下的效果了。如果有什么錯誤的話,看看第一個教程。
coorddemo.jpg

posted @ 2007-03-05 19:00 大熊貓 閱讀(862) | 評論 (0)編輯 收藏


?(1)把類庫從 www.libsdl.org 上下載下來。
?(2)在VC2005中,添加一個庫文件目錄,和頭文件目錄。
directory.jpg
(3)把動態鏈接庫COPY到C:\\Windows\System下面。
(4)建立一個Win32空項目。
new_project.jpgempty_project.jpg

(5)新建一個C++源文件。
new_cpp.jpg
敲下如下代碼
#include <sdl.h>
int?main(?int?argc,?char*
?args[]?)
{
????
// Start?SDL

????SDL_Init(?SDL_INIT_EVERYTHING?);
????
????
// Quit?SDL

????SDL_Quit();
????
????
return ? 0
;????
}

(6)設置一下工程的屬性
project_properties.jpg
multithreadeddll.jpg
(7)加入二各引入庫
linker.jpg
(8)編譯運行一下,沒有錯誤的話就成功了,有錯誤的話,檢查前面的幾個步驟是否出錯了。
posted @ 2007-03-04 19:45 大熊貓 閱讀(718) | 評論 (0)編輯 收藏

拉登說:中國是全世界唯一絕對不能惹的國家。原因是這樣的,基地組織曾向中國派出五名恐怖分子,結果一人炸立交橋,轉暈于立交橋上;一人炸公交車,沒擠上車;一人炸超市,炸彈遙控器被盜;一人炸政府大樓,被保安狂揍,叫你討薪,叫你上訪;一人成功炸礦,死傷數百人,半年沒有任何新聞報道,潛回基地后被以撒謊罪處決了。最后一次曾經嘗試去炸廣州,結果一出火車站就被飛車黨把炸藥包搶了
posted @ 2007-01-03 22:59 大熊貓 閱讀(913) | 評論 (0)編輯 收藏

起因,昨天寫的一段小程序
#include? < iostream >
#include?
< map >
#include?
< iterator >
#include?
< vector >
#include?
< algorithm >
using ? namespace ?std;
ostream?
& operator << (ostream? & os, const ?pair < int , int > ? &
mp)
{
???os
<<
mp.first;
???os
<<
mp.second;
???
return
?os;
}

int ?_tmain( int ?argc,?_TCHAR * ?argv[])
{
???pair
< int , int > ?mmp( 100 , 200
);
???cout
<<
mmp;
???map
< int , int >
?imap;
???map.insert(make_pair(
100 , 100
));
???imap.insert(make_pair(
22 , 123
));
???copy(imap.begin(),imap.end(),ostream_iterator
< pair < int , int > ? > (cout, " \n "
));
???
return ? 0
;
}

未能通過編譯,報的錯誤是:沒有找到接受“<未知>”類型的右操作數的運算符(或沒有可接受的轉換),百思不得其解,應為我覺得 我明明重載了<<運算符。再沒有辦法的情況下請教了CSDN論壇上的一些朋友,終于弄明白了其中的原因(可能這個知識點很菜,高手 不要見笑)。
ostream_iterator<_Ty, _Elem, _Traits>& operator=(const _Ty& _Val)
{
? *_Myostr << _Val;///~~~~~~~~~~~~~~~~~~~~~~~這是在ostream_iterator類源代碼當中,就是這里報錯了
? if (_Mydelim != 0)
? *_Myostr << _Mydelim;
? return
}
在上面那到程序當中_Val類型是pair<int,int> *_Myostr類型是ostream,顯然這里出錯,代表編譯器就好像沒有看到我的重載。出現以上現象的原因就是當編譯器看到*_Myostr<<_Val時候,它會先在自己的名字空間查找<<,這個估計發生在模板編譯的第一個階
段(不知道是不是該這么說),它看到了一個范型的<<重載(估計),于是就不在去別的地方查找??墒堑搅藢嵗臅r候,編譯器發現 沒有匹配的<<運算,于是就報錯了。如果我們把重載寫在std空間里,也就是和ostream_iterator一個空間里,編譯器在實例化的時 候也會把它納入考慮對象之一,這個時候它就會選擇我們的重載,一切就OK了。注意,如果編譯器在*_Myostr<<_Val所在名字空間沒有找到 <<重載,則它會進行類型相關查找。就是去定義*_Myostr類型或_Va類型的空間查找,再找不到那它就會去全局空間去查找。
個人理解,不是很肯定,誠請高手糾正,感謝CSDN上周星星和晨星。

posted @ 2006-12-29 19:42 大熊貓 閱讀(1894) | 評論 (13)編輯 收藏

僅列出標題
共5頁: 1 2 3 4 5 
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            久久精品成人一区二区三区蜜臀| 国产九九精品| 亚洲欧洲精品一区二区| 亚洲欧美日韩天堂| 亚洲欧美中文另类| 久久99伊人| 免费欧美日韩| 亚洲成人在线视频播放| 亚洲激情在线激情| 亚洲小说春色综合另类电影| 午夜久久一区| 久久网站免费| 欧美精品久久99久久在免费线| 欧美日韩国产首页在线观看| 国产免费成人av| 亚洲经典自拍| 亚洲午夜激情网站| 久久久www成人免费精品| 欧美福利电影在线观看| 亚洲美女免费精品视频在线观看| 中日韩男男gay无套| 久久久久.com| 国产精品国产三级国产a| 尤物yw午夜国产精品视频| 99国内精品久久| 久久精品综合网| 亚洲精品一区二区三区蜜桃久| 亚洲一区三区视频在线观看| 免费不卡视频| 国产精品视频免费在线观看| 亚洲国产另类久久精品| 亚洲午夜久久久久久久久电影院| 久久婷婷国产麻豆91天堂| 99精品国产在热久久下载| 久久精品亚洲一区二区三区浴池| 欧美日韩国产在线播放网站| 国产一区二区三区在线观看免费 | 91久久精品国产91久久性色| 亚洲一二三区在线| 欧美激情精品久久久久久变态| 亚洲一区二区三区影院| 欧美激情第4页| 在线观看国产一区二区| 欧美亚洲一区| 一区二区欧美日韩| 欧美激情在线| 亚洲精品一线二线三线无人区| 欧美在线中文字幕| 中文日韩欧美| 欧美日韩你懂的| 欧美成人性网| 在线观看欧美一区| 久久精品视频在线观看| 亚洲午夜在线| 国产精自产拍久久久久久| 亚洲女性裸体视频| av成人老司机| 欧美视频免费看| 中文高清一区| 亚洲作爱视频| 国产精品久久久久久一区二区三区| 99精品欧美一区二区蜜桃免费| 亚洲第一福利在线观看| 欧美 日韩 国产精品免费观看| 亚洲高清资源综合久久精品| 另类综合日韩欧美亚洲| 久久久久久穴| 亚洲高清视频一区| 欧美黑人一区二区三区| 免费在线观看一区二区| 日韩亚洲欧美在线观看| 日韩午夜在线观看视频| 欧美午夜片欧美片在线观看| 亚洲一区二区三区精品在线| 亚洲图片欧洲图片日韩av| 国产精品一区二区久久久久| 午夜在线不卡| 欧美专区福利在线| 亚洲人在线视频| 亚洲美女诱惑| 国产伦一区二区三区色一情| 久久综合给合久久狠狠色 | 欧美日韩1080p| 亚洲一区精品在线| 香港成人在线视频| 一区在线视频| 亚洲国产裸拍裸体视频在线观看乱了中文 | 欧美日韩一区在线观看视频| 亚洲欧美日韩国产一区| 亚洲一区在线观看视频| 国产日韩在线亚洲字幕中文| 老色鬼精品视频在线观看播放| 蜜桃av综合| 亚洲欧美国产高清| 久久久国产午夜精品| 亚洲伦理在线观看| 亚洲一区二区三区激情| 伊人久久婷婷| 99日韩精品| 国内外成人免费激情在线视频网站 | 久久露脸国产精品| 欧美成人综合网站| 亚洲欧美在线看| 开心色5月久久精品| 亚洲一级片在线观看| 久久久免费精品视频| 亚洲一区二区在线播放| 久久久久久久高潮| 亚洲欧美日韩国产综合| 久久影院亚洲| 亚洲欧美视频在线观看视频| 久久香蕉国产线看观看网| 亚洲视频中文| 久久婷婷一区| 欧美一区=区| 欧美日韩亚洲不卡| 亚洲盗摄视频| 红桃视频国产一区| 亚洲综合电影一区二区三区| 一本久久a久久精品亚洲| 久久精品人人| 久久综合九色综合欧美就去吻| 欧美三级电影一区| 亚洲高清视频在线| 激情六月婷婷久久| 午夜伦欧美伦电影理论片| 亚洲一区二区黄色| 欧美精品一区二区视频| 欧美激情导航| 亚洲电影第1页| 久久一区二区三区国产精品 | 亚洲精品美女久久久久| 亚洲黄一区二区| 久久九九精品| 欧美96在线丨欧| 在线观看视频一区| 久久久久久亚洲精品不卡4k岛国| 久久婷婷色综合| 激情视频一区二区三区| 午夜久久福利| 久久最新视频| 亚洲国产aⅴ天堂久久| 久久久噜噜噜久久中文字幕色伊伊| 久久久久国产精品一区二区| 久久精品国产一区二区电影| 国产亚洲精品久久飘花| 欧美在线免费视频| 久久亚洲视频| 狠狠色狠狠色综合日日五| 欧美中文在线字幕| 老司机精品导航| 亚洲国产婷婷| 欧美视频在线一区二区三区| 国产精品99久久久久久久女警| 欧美chengren| 亚洲日本中文字幕| 亚洲一区二区三区午夜| 国产精品免费一区豆花| 午夜精品久久久久久久99樱桃 | 亚洲黄色天堂| 欧美性猛交视频| 久久精品二区三区| 亚洲激情在线观看| 篠田优中文在线播放第一区| 国内精品国语自产拍在线观看| 蜜桃av一区| 亚洲一区精品视频| 久久久久中文| 99精品国产在热久久下载| 国产精品女主播在线观看| 久久久久久一区| 日韩网站在线观看| 久久久久国产成人精品亚洲午夜| 亚洲黄色一区| 国产欧美精品一区| 欧美高清在线| 亚洲欧美日韩专区| 亚洲国产精品悠悠久久琪琪| 欧美自拍偷拍| 日韩天天综合| 狠狠色伊人亚洲综合成人| 欧美日韩一区国产| 久久麻豆一区二区| 亚洲影院色在线观看免费| 欧美成人精品高清在线播放| 亚洲午夜91| 亚洲精品美女久久久久| 国产一区美女| 国产精品看片你懂得| 欧美成在线观看| 欧美中文在线观看| 亚洲永久免费观看| 最新中文字幕一区二区三区| 美女尤物久久精品| 久久疯狂做爰流白浆xx| 亚洲一区在线免费| 亚洲日韩欧美视频| 在线观看视频一区二区| 国产精品午夜av在线| 欧美日韩精品免费看|