改變一下 DxDraw 的背景

來源:互聯網
上載者:User

初學delphiX ,想改變一下 DxDraw 的背景,於是找到了這篇文章

話題247821的標題是: 請教用過DelphiX的兄弟 (100分)
分類:圖形圖象

Nutty (2000-05-18 17:34:00)

在下用dxdraw.surface.fill(devcolor: longint)初始化背景色,
然而這個longint的devcolor我不知該如何賦值.

現象:
   查看其定義,可以用RGB顏色來表示,但當我想要背景為綠色時,
執行dxdraw.surface.fill(RGB(0,128,0))卻得到紫色背景!

wjiachun (2000-05-18 17:55:00)

dxdraw.surface.fill(RGB(0,255,0));

Nutty (2000-05-18 17:56:00)

也即是說
  範圍為 -7FFFFFFE----7FFFFFFF 的TColor色與
定義範圍為 0----FFFFFFFF 的dev色之間如何進行轉換?

Nutty (2000-05-18 17:58:00)

wjiachun兄:
  不是這樣...
dxdraw.surface.fill(clgreen)得到的是紫色背景...faint

wjiachun (2000-05-18 18:07:00)

I faint too!

Croco (2000-05-18 18:08:00)

範圍為 -7FFFFFFE----7FFFFFFF 的TColor色與
定義範圍為 0----FFFFFFFF 的dev色之間如何進行轉換?
>>
沒用過 DelphiX, 轉換可用:
function ColorToRGB(Color: TColor): Longint;

>>附例子中的調用,不知有沒有協助:
var Col: TRGBQuad;
c := DXDraw.Surface.ColorMatch(RGB(Col.rgbRed, Col.rgbGreen, Col.rgbBlue));
DXDraw.Surface.Fill(c);

Nutty (2000-05-19 22:52:00)

還是不行,難道它用的顏色的末六個位元組不代表RGB? 還是調色盤沒用對?

Zephyr (2000-05-19 23:26:00)

Col參數實際上就是象素在記憶體中的資料,它的值取決於TDXDraw控制項的
Surface.BitCount的值。當BitCount為8時,每個象素用1byte表示(8位),
這時Col參數實際上是一個調色盤的索引值,只使用最後8位(0至255)。
當BitCount為24時,每個象素用3byte表示,這時Col的末六個位元組才是代表
RGB三色的量。估計你用的是640X480X16等16位的顯示模式(看一下DXDraw的
Display屬性就知道了),這時Col參數中用後15位表示RGB三色的分量,每一
色為5位,所以你用$00FF00無法顯示出綠色。你可以根據你的需要用位操作來
產生出16位顯示模式下的Col值。

Fudei (2000-05-20)

怎麼不行呢,我用過行得

Nutty (2000-05-20 22:39:00)

確實是設成24bits真彩才正確顯示顏色, Zephyr兄果然了得...

但是使用者如果設定window的顏色為16或8bits時又怎麼辦呢? 再用RGB(r,g,b)填色又會亂顯示了.我記得論壇有過討論,但不了了之,你有好辦法嗎?

Zephyr (2000-05-21 1:03:00)

根據實際情況來計算顏色值(就是說先判斷當前顯示模式,再根據當前顯示模
式下象素的格式計算顏色值)。或者讓你的程式在全屏方式下運行,但要事先
把TDXDraw的Display屬性設為24bits的顯示模式,這樣在切換到全屏方式下時
會用Display屬性指定的顯示模式運行。具體如何做可參考DelphiX的例子。

也許(應該)還有更好的方法。

Nutty (2000-05-22 1:24:00)

謝謝

sunwork (2000-08-03 20:44:00)

如何用DIRECTDRAW顯示真彩色的圖片,我只能顯示256色的圖片,用SETDISPLAYMODE設定(800,600,8)
再設定成(800,600,24)真彩色模式的時候就出現錯誤。能有辦法嗎?

Zephyr的回答最終被接受。

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.