亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁(yè) > 編程 > Delphi > 正文

Delphi使用OpenGL2d繪圖之畫(huà)圖片Bmp的方法

2020-01-31 20:51:42
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

一、前言:

對(duì)于Delphi來(lái)說(shuō),要畫(huà)圖片要先處理一下,需要引用別的單元,而Delphi中沒(méi)帶,需要另外下載Gl.pas。網(wǎng)上常見(jiàn)自帶的OpenGl單元封裝的是1.0版的,有此函數(shù)未聲明。網(wǎng)上可以找到Gl.pas單元。另外需要一個(gè)Glaux.pas單元與glaux.dll,是輔助庫(kù)。在本文最后會(huì)提供下載。

二、實(shí)現(xiàn)流程:

繪畫(huà)圖片需要以下幾個(gè)流程。Window本身的繪圖是以位圖為基礎(chǔ)的,png,jpg等,繪畫(huà)時(shí),可以轉(zhuǎn)為bmp再畫(huà)。

1.加載bmp圖片:使用auxDIBImageLoadA或其他函數(shù)

2.轉(zhuǎn)換為紋理:glGenTextures -> glBindTexture -> glTexImage2D, glTexParameteri用于設(shè)置相關(guān)參數(shù)

3.繪制紋理:glBindTexture -> glBegin(GL_QUADS) -> glTexCoord2f -> glVertex2f -> glEnd

三、利用glDrawPixels函數(shù)繪圖

glDrawPixels共有如下5個(gè)參數(shù):

width: 表圖像的寬度
height: 表圖像的高度
format:表圖像的數(shù)據(jù)存儲(chǔ)格式
atype: 未知
pixels: DIB數(shù)據(jù)的指針

示例代碼如下:

procedure TForm1.Draw;var Bmp: TBitmap;begin Bmp := TBitmap.Create; Bmp.LoadFromFile(ExtractFilePath(ParamStr(0)) + '1.bmp'); // 清空緩沖區(qū) glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT); // TBitmap的圖像數(shù)據(jù)在內(nèi)存中是按行倒序連續(xù)存放的,通過(guò)TBitmap.ScanLine[TBitmap.Height-1]可以取得首地址即圖像緩沖區(qū)地址 // bmp圖片的顏色是按b g r存儲(chǔ)的,所以要選 GL_BGR_EXT做為參數(shù) glDrawPixels(Bmp.Width, Bmp.Height, GL_BGR_EXT, GL_UNSIGNED_BYTE, Bmp.ScanLine[Bmp.Height - 1]); SwapBuffers(FDC); Bmp.Free;end;

用以上方法繪制圖片不需要啟用紋理映射,可以通過(guò)glPixelZoom函數(shù)來(lái)縮放圖片,顯示位置在窗口的左下角(暫時(shí)不知道如何改變圖像位置。)

三、使用紋理繪圖

想要按制圖片的顯示位置與放大縮小,可以用以下方法。

1.按流程,我們先把圖片加載到程序里,獲取相關(guān)的圖片信息。

將圖片加載到紋理中,可參考本站://www.49028c.com/article/52125.htm

在delphi中加載一張位圖是很簡(jiǎn)單的,可以通過(guò)以下方式加載:

(1)通過(guò)輔助庫(kù)的auxDIBImageLoadA函數(shù)加載圖片,返回是一個(gè)PTAUX_RGBImageRec數(shù)據(jù)指針,DIB數(shù)據(jù)格式為RGB。

 // RGB數(shù)據(jù)的結(jié)構(gòu)體 TAUX_RGBImageRec = record  sizeX, sizeY: GLint;  data: pointer; end; PTAUX_RGBImageRec = ^TAUX_RGBImageRec;var p: PTAUX_RGBImageRec;begin p := auxDIBImageLoadA(PAnsiChar(ExtractFilePath(ParamStr(0)) + '1.bmp')); // p 怎么釋放? Dispose與Freemem都無(wú)法操作這個(gè)指針end;

(2)通過(guò)TBitmap.LoadFromFile加載圖片。Delphi自帶,從效率上對(duì)比,與auxDIBImageLoadA性能是一樣的,但DIB數(shù)據(jù)格式為BGR,DIB指針為TBitmap.ScanLine[Bmp.Height - 1]

var Bmp: TBitmap;begin Bmp := TBitmap.Create; TBitmap.LoadFromFile(ExtractFilePath(ParamStr(0)) + '1.bmp'); // do something // 用完釋放 Bmp.Free;end;

2.創(chuàng)建紋理,其中的glGenTextures與glBindTexture,在Gl.pas中。

 // 創(chuàng)建紋理區(qū)域 glGenTextures(1, @texture); // 綁定紋理區(qū)域 glBindTexture(GL_TEXTURE_2D, texture); // 使用位圖創(chuàng)建圖像紋理 glTexImage2D(  GL_TEXTURE_2D,      // 紋理是一個(gè)2D紋理 GL_TEXTURE_2D  0,            // 圖像的詳細(xì)程度 默認(rèn) 0  3,            // 數(shù)據(jù)的成分?jǐn)?shù)。因?yàn)閳D像是由紅,綠,藍(lán)三種組成 默認(rèn)3  Bmp.Width,        // 紋理的寬度  Bmp.Height,        // 紋理的高度  0,            // 邊框的值 默認(rèn) 0  GL_BGR_EXT,        // 數(shù)據(jù)格式 bmp使用 bgr  GL_UNSIGNED_BYTE,     // 組成圖像的數(shù)據(jù)是無(wú)符號(hào)字節(jié)類型的  Bmp.ScanLine[Bmp.Height - 1] // DIB數(shù)據(jù)指針 ); // 下面兩行是讓opengl在放大原始的紋理大(GL_TEXTURE_MAG_FILTER)或縮小原始紋理(GL_TEXTURE_MIN_FILTER)時(shí)OpenGL采用的濾波方式。 // GL_LINEAR 使用線性濾波,可以把圖片處理處平滑,但需要更多的內(nèi)存與CPU glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); // 線形濾波 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); // 線形濾波

3.繪制紋理

繪制紋理之前,必須通知OpenGL開(kāi)啟紋理映射glEnable(GL_TEXTURE_2D)。開(kāi)啟后,非紋理的繪制將不起作用。用完記得關(guān)閉就可以了。

 // 以下是繪圖,利用一個(gè)四邊形,繪制圖片 // 啟用紋理映射 if glIsEnabled(GL_TEXTURE_2D) = 0 then  glEnable(GL_TEXTURE_2D); // 清空緩沖區(qū) glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);  l := 10; t := 10; w := 200; // 放大為200*200的圖片 // 選擇紋理 如果場(chǎng)景中使用多個(gè)紋理,不能在glBegin() 和 glEnd() 之間綁定紋理 glBindTexture(GL_TEXTURE_2D, texture); glBegin(GL_QUADS); // glTexCoord2f 的第一個(gè)參數(shù)是X坐標(biāo)。 // 0.0是紋理的左側(cè)。 0.5是紋理的中點(diǎn), 1.0是紋理的右側(cè)。 // glTexCoord2f 的第二個(gè)參數(shù)是Y坐標(biāo)。 // 0.0是紋理的底部。 0.5是紋理的中點(diǎn), 1.0是紋理的頂部。 glTexCoord2f(0, 1); glVertex2f(l, t); glTexCoord2f(1, 1); glVertex2f(l + w, t); glTexCoord2f(1, 0); glVertex2f(l + w, t + w); glTexCoord2f(0, 0); glVertex2f(l, t + w); glEnd();

以上的繪制就結(jié)束了,以下是Draw中完整的代碼,可以不引用輔助庫(kù)Glaux.pas

procedure TForm1.Draw;var Bmp: TBitmap; texture: GLuint; l, t, w: Integer;begin Bmp := TBitmap.Create; Bmp.LoadFromFile(ExtractFilePath(ParamStr(0)) + '1.bmp'); // 創(chuàng)建紋理區(qū)域 glGenTextures(1, @texture); // 綁定紋理區(qū)域 glBindTexture(GL_TEXTURE_2D, texture); // 使用位圖創(chuàng)建圖像紋理 glTexImage2D(  GL_TEXTURE_2D,      // 紋理是一個(gè)2D紋理 GL_TEXTURE_2D  0,            // 圖像的詳細(xì)程度 默認(rèn) 0  3,            // 數(shù)據(jù)的成分?jǐn)?shù)。因?yàn)閳D像是由紅,綠,藍(lán)三種組成 默認(rèn)3  Bmp.Width,        // 紋理的寬度  Bmp.Height,        // 紋理的高度  0,            // 邊框的值 默認(rèn) 0  GL_BGR_EXT,        // 數(shù)據(jù)格式 bmp使用 bgr  GL_UNSIGNED_BYTE,     // 組成圖像的數(shù)據(jù)是無(wú)符號(hào)字節(jié)類型的  Bmp.ScanLine[Bmp.Height - 1] // DIB數(shù)據(jù)指針 ); // 下面兩行是讓opengl在放大原始的紋理大(GL_TEXTURE_MAG_FILTER)或縮小原始紋理(GL_TEXTURE_MIN_FILTER)時(shí)OpenGL采用的濾波方式。 // GL_LINEAR 使用線性濾波,可以把圖片處理處平滑,但需要更多的內(nèi)存與CPU glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); // 線形濾波 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); // 線形濾波 // 以下是繪圖,利用一個(gè)四邊形,繪制圖片 // 啟用紋理映射 if glIsEnabled(GL_TEXTURE_2D) = 0 then  glEnable(GL_TEXTURE_2D); // 清空緩沖區(qū) glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);  l := 10; t := 10; w := 200; // 放大為200*200的圖片 // 選擇紋理 如果場(chǎng)景中使用多個(gè)紋理,不能在glBegin() 和 glEnd() 之間綁定紋理 glBindTexture(GL_TEXTURE_2D, texture); glBegin(GL_QUADS); // glTexCoord2f 的第一個(gè)參數(shù)是X坐標(biāo)。 // 0.0是紋理的左側(cè)。 0.5是紋理的中點(diǎn), 1.0是紋理的右側(cè)。 // glTexCoord2f 的第二個(gè)參數(shù)是Y坐標(biāo)。 // 0.0是紋理的底部。 0.5是紋理的中點(diǎn), 1.0是紋理的頂部。 glTexCoord2f(0, 1); glVertex2f(l, t); glTexCoord2f(1, 1); glVertex2f(l + w, t); glTexCoord2f(1, 0); glVertex2f(l + w, t + w); glTexCoord2f(0, 0); glVertex2f(l, t + w); glEnd(); Bmp.Free; SwapBuffers(FDC);end;

本實(shí)例完整代碼可點(diǎn)此下載。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表

圖片精選

国产精品777777在线播放| 国产欧美欧洲在线观看| 中文字幕第10页| 成人www视频网站免费观看| 国产日本在线观看| aa在线视频| 亚洲欧美区自拍先锋| 男人添女人下部高潮视频在线观看| av影视在线看| 午夜免费久久看| www.爱色av.com| 午夜伦伦电影理论片费看| 久久久国产亚洲精品| 日本精品一级二级| 在线免费观看一区二区| 精品99视频| 首页亚洲欧美制服丝腿| 中文字幕一区电影| 欧美成人手机视频| 久久一日本道色综合| 久久婷婷国产综合国色天香| 欧美片一区二区| 欧美 日韩 人妻 高清 中文| 亚洲欧美在线视频观看| 欧美日本在线一区| 亚洲人成在线影院| 国产精自产拍久久久久久蜜| 一区二区三区亚洲视频| 7777久久香蕉成人影院| 欧美另类在线播放| 亚洲老妇xxxxxx| 国产成人亚洲精品无码h在线| 国产日韩av高清| 91传媒视频在线观看| 天堂中文www在线| 日韩一区二区在线| 亚洲精品中文字幕乱码三区91| 美女写真久久影院| 五月天婷婷视频| 久久99久久99| 天天操天天干天天干| 国产精品三级美女白浆呻吟| 国产三级av在线播放| 一二三四区视频| 日韩一区二区欧美| 国产v亚洲v天堂无码| 欧美一区二区三区在线| 好吊色一区二区三区| 成人午夜视频在线观看免费| 91在线播放国产| 国产视频久久久久久| 99re6热在线精品视频播放速度| 亚洲福利视频网| 青青青手机在线视频| 福利视频一区二区| 91成年人网站| 日韩欧美aaaaaa| 精久久久久久久久久久| 国偷自产av一区二区三区小尤奈| 国产精品美女久久久久久不卡| 成人精品免费看| 四虎成人影院网址| 久久久久久a亚洲欧洲aⅴ| 一区二区精品免费视频| 成人精品免费网站| 欧美老肥妇做.爰bbww| 亚洲性av网站| www.xxxx国产| 久久久久成人网| 成人综合网站| 蜜乳av另类精品一区二区| 欧美孕妇孕交| 国产探花一区二区| 97人妻精品视频一区| 亚洲风情亚aⅴ在线发布| 久久久久久欧美精品色一二三四| 国产精品国产一区二区三区四区| 男人天堂综合网| 欧美精品不卡| 国产乱肥老妇国产一区二| www插插插无码免费视频网站| 日本三级电影免费观看| 国产精品亚洲视频| 伊人久久大香线蕉精品| 日本福利午夜视频在线| 中文字幕精品在线播放| 天堂av在线资源| 久久黄色免费视频| 四虎影视18库在线影院| 一区二区三区成人精品| 狼人综合视频| 国产1区2区在线| 羞羞答答国产精品www一本| 9191国产视频| 无码人妻黑人中文字幕| 在线观看的日韩av| 日韩电影在线观看完整免费观看| 亚洲一区二区在线看| 欧美体内谢she精2性欧美| 国产精品美女久久久久久| 在线播放黄网| 看黄网站在线| 日本一区二区中文字幕| 欧美精品久久久久久久小说| 久久国产乱子伦精品| 国产大学生视频| 一区二区三区视频在线免费观看| 国产精品久久久免费视频| 久久久www成人免费精品张筱雨| 国产精品理论片在线观看| 中文字幕国产传媒| 亚洲欧美日韩国产成人精品影院| 色欧美片视频在线观看在线视频| 国产精品久久久久久久久久久久| 欧美乱妇一区二区三区不卡视频| 久久91超碰青草在哪里看| 欧美日韩日日夜夜| 日本在线播放不卡| 国产精品白嫩美女在线观看| 99视频资源网| 亚洲精品久久久久久久蜜桃臀| 大片免费在线看视频| 三级av免费观看| 成人软件在线观看| 韩国免费在线视频| 免费观看又色又爽又黄的网站| 日韩欧美精品网址| 一本一道无码中文字幕精品热| 久久字幕精品一区| 成年女人a毛片免费视频| 在线国产亚洲欧美| 国产精品久久久久国产精品日日| 91亚洲一线产区二线产区| 夜夜躁狠狠躁日日躁婷婷小说| 丰满少妇被猛烈进入| 欧美怡红院视频| 日本肉肉一区| 日本成人精品视频| 国产高清不卡一区| 欧美怡春院一区二区三区| 8x8x视频在线| 亚洲精品大尺度| 欧美日韩精品久久久免费观看| 91一区一区三区| 国产精品视频一区二区三| 久久久久久77777| 综合天堂av久久久久久久| 久久精品国产www456c0m| 国产麻豆精品视频一区二区| 久草视频在线免费| 91中文在线视频| 麻豆视频官网| 最新国产成人av网站网址麻豆| 亚洲天堂一区二区在线观看| 久久久99精品久久| 国色天香2019中文字幕在线观看| 国产精品自在在线| 国产在线精品一区二区夜色| 免费在线欧美黄色| 在线 亚洲欧美在线综合一区| h精品动漫在线观看| 欧在线一二三四区| 国产又大又黄又爽| 久久国产精品免费观看| www.噜噜色.com| 一区二区三区四区五区视频在线观看| 久久久久久久激情| 黄色片免费在线观看视频| 国产乱人伦精品一区| 欧美在线视频一区二区三区| 婷婷亚洲一区二区三区| 国产精品美女一区二区三区| 九色蝌蚪在线| 精品国产欧美一区二区三区成人| 精品国产aⅴ| 香蕉成人伊视频在线观看| 菠萝蜜视频在线观看一区| 福利网址在线| 1区2区视频| 国产精品自在线拍| 欧洲亚洲两性| 国产日韩精品综合网站| 亚洲乱码国产一区三区| 欧美高清一级片| 91亚洲欧美| 久久亚洲电影天堂| 久国产精品视频| 蜜桃久久久久| 99久在线精品99re8热| 999国产精品永久免费视频app| 四虎久久免费| 久久精品性爱视频| 亚洲欧洲综合另类| 好吊妞无缓冲视频观看| 久久久久99精品一区| 久久精品综合网| 日本在线观看天堂男亚洲| 在线播放日韩欧美| 亚洲国产日韩欧美| 麻豆九一精品爱看视频在线观看免费| 91国拍精品国产粉嫩亚洲一区| 日韩一级片免费观看| 久久在线精品视频| 日本免费一区二区三区等视频| 亚洲欧洲美洲综合色网| 亚洲制服av| 久久丝袜视频| sqte在线播放| 欧美成人午夜激情在线| 成人免费观看www在线| 黄色片视频在线免费观看| 一二三区精品视频| 天天干天天爽天天射| 亚洲电影成人成人影院| heyzo高清中文字幕在线| se69色成人网wwwsex| 91麻豆精品| 欧美在线视频第一页| 国产乱妇乱子在线播视频播放网站| 国外男同性恋在线看| 亚洲天天在线日亚洲洲精| 亚洲成在人线在线播放| 国产福利精品一区二区| 99热成人精品热久久66| 一区二区三区中文在线| 男人日女人下面视频| 影音先锋亚洲精品| 日韩综合小视频| 日韩一区二区三区高清免费看看| 欧美4khd| 亚洲精品网站在线播放gif| 超薄肉色丝袜脚交一区二区| 欧美熟妇乱码在线一区| 日韩视频在线观看一区| 一区在线免费观看| 久久三级视频| jlzzjlzz国产精品久久| 国产伦精品一区二区三区四区视频| 国产成人午夜片在线观看高清观看| 四虎影视精品成人| 亚洲欧美日韩精品久久奇米色影视| 一本久久a久久精品亚洲| 欧美精品aⅴ在线视频| 丁香花五月激情| 成人性视频免费看| 日本道在线观看一区二区| 希岛爱理一区二区三区av高清| 五月天丁香婷| 石原莉奈一区二区三区高清在线| wwwwww.色| 日韩人妻一区二区三区蜜桃视频| 91视频国产资源| 视频在线不卡免费观看| 亚洲精品视频在线| 亚洲乱码精品一二三四区日韩在线| 高清日韩欧美| 最近的2019中文字幕免费一页| 精品成人在线| 欧美a级片视频| 亚洲欧洲国产精品一区| 成人av高清在线| 四虎免费在线视频| 一区二区三区在线资源| 中文字幕亚洲一区二区三区| 久久久久久免费网| 99中文字幕在线观看| 黄色一级视频片| 免费av在线一区| 国产成人精品自拍| 国产伦理一区二区三区| 天堂av中文字幕| 国产精品天天av精麻传媒| 成人黄色在线观看| 国产夫妻在线观看| 国产精品a成v人在线播放| 传媒在线观看| 西野翔中文久久精品字幕| 国产精品福利电影| 狠狠色丁香久久综合频道| 四虎.com| 中文字幕激情小说| 极品视频在线| 国产精品一区二区精品| 亚洲午夜性刺激影院| 亚洲精品成人无码熟妇在线| 麻豆视频在线| 欧美黄色三级| caopor在线| 色av中文字幕| 精品美女久久| 国产精品麻豆久久久| 十八禁视频网站在线观看| 久久久久9999亚洲精品| 97精品国产91久久久久久| 国产女人高潮的av毛片| 久久人人爽人人爽人人av| 1024在线看片你懂得| 美女在线视频一区二区| 午夜电影网一区| 大香一本蕉伊线亚洲网| 亚洲欧美日韩三级| 天堂√中文最新版在线| 国产精品久久久久久久久搜平片| 国产性xxxx| 日韩av免费看网站| 亚洲色图欧美制服丝袜另类第一页| 狠狠久久综合婷婷不卡| 日韩久久久精品| 国产91精品一区| 亚洲国产精品嫩草影院久久| 综合欧美国产视频二区| 成人免费网站www网站高清| 亚洲欧洲闷骚av少妇影院| 久久中文字幕在线| 欧美sm一区| 午夜精品亚洲一区二区三区嫩草| 亚洲欧美综合网| 国产高潮流白浆喷水视频| 91视频这里只有精品| 欧洲亚洲在线视频| 日本黄色电影网站| 国卡一卡二卡三免费网站| 国产福利影院在线观看| 五月婷婷一区| 91精品国产高清久久久久久久久| 精品国产一区二区三区四区| 久久久久久女乱国产| 日韩欧美aⅴ综合网站发布|