2011-06-16 86 views
0

我正在使用LPDIRECT3DTEXTURE9來保存圖像。部分時間顯示透明色

這是用來顯示我的圖片的功能。

int drawcharacter(SPRITE& person, LPDIRECT3DTEXTURE9& image) 
{ 
position.x = (float)person.x; 
position.y = (float)person.y; 
sprite_handler->Draw(
image, 
&srcRect, 
NULL, 
&position, 
D3DCOLOR_XRGB(255,255,255)); 
return 0; 
} 

按照書上我已經表明作爲最後一個參數的RGB顏色不會顯示在屏幕上,你這是怎麼創建的透明度。

這適用於大多數情況,但在我的圖像和圖片邊緣留下一條粉紅線。經過試驗和錯誤後,我發現如果我回到Photoshop中,我可以通過用粉紅色繪製粉色框來消除粉色框。這可以在左邊的船上看到。

我開始認爲photoshop是混合的圖像的邊緣,使背景不是所有相同的粉色陰影雖然我沒有證據。 enter image description here

任何人都可以通過編程來解決這個問題,或者是圖像中的錯誤嗎?

如果有人擅長photoshop,他們可以告訴我如何修復圖像,我主要使用png,但是如果需要,我願意改變。

編輯:質地創建代碼的要求

character_image = LoadTexture("character.bmp", D3DCOLOR_XRGB(255,0,255)); 
if (character_image == NULL) 
    return 0; 
+0

1)什麼是LoadTexture()函數? 2)我假設你真的使用'character.png',而不是'character.bmp',對吧? – vines 2011-06-16 14:29:49

+0

@vines LoadTexture是直接x的一部分,我沒有做到,是的,我用bmp和png,一直在改變爲png來嘗試解決這個問題。 – Skeith 2011-06-16 14:32:08

+0

BMP格式不支持Alpha通道。它不會工作。 PNG會,如果alpha通道實際上包含在文件中,它會起作用。用一些圖像查看器檢查它:你不應該看到彩色的背景矩形,只有前景可以自由地「浮動」。是的,如果LoadTexture真的是DirectX的一部分,請給出一個鏈接到它的文檔? – vines 2011-06-16 14:44:06

回答

0

正如你已經使用PNG,你可以直接從Photoshop中存儲alpha值出現。 PNG支持透明度,並且可以提供比透明顏色更好的外觀。

它被描述在http://www.toymaker.info/Games/html/textures.html(例如)。

+0

如果你看看圖像頂部的酒吧有你的建議。要麼它不被支持,要麼需要不同的直接x功能。 – Skeith 2011-06-16 12:36:21

+0

@Skeith:查看編輯答案中的鏈接,這可能也有幫助。或者提供你的紋理創建代碼,以便我們可以分析它:) – vines 2011-06-16 12:39:47

+0

不知道如何紋理創建代碼將幫助,但我把它放在 – Skeith 2011-06-16 13:05:14

0

Photoshop是抗鋸齒的圖像邊緣。如果它確定一個像素的30%是在圖像內部,而70%是在外部,則它將該像素的alpha值設置爲70%。這比使用基於像素的透明度蒙版產生更平滑的結果。你似乎在拋棄這些阿爾法值,是嗎?粉色大概來自Photoshop顯示部分透明像素的方式。

+0

是的...也許,這聽起來像我所看到的。我如何才能讓photoshop具有純色並且不做任何更改? – Skeith 2011-06-16 13:09:44

+0

這不是你想要做的!你想找到一種方法來在Direct3D中使用這些alpha值。但現在我已經不在我的深處了。 – TonyK 2011-06-16 13:50:31

+0

這正是PNG要幫助的地方! – vines 2011-06-16 14:15:12

1

您正在加載一個BMP圖像,該圖像本身不支持透明度 - 最後一個參數D3DCOLOR_XRGB(255,0,255)正用於爲沒有任何圖像的圖像添加透明度。問題是,顏色必須完全匹配,如果關閉,即使只有一個,它也不會被轉換爲透明,您會看到顯示的洋紅色。

將圖像保存爲具有透明度的24位PNG,並且如果正確加載它們,則不會出現問題。在保存之前也不要添加洋紅色背景。

+0

如果您有困擾正確地閱讀我的問題,您會發現這是我正在做的事情,並且詢問爲什麼圖像邊緣和精靈輪廓會出現問題,購買足夠混亂。你也會看到我把bmp換成了png作爲測試,結果沒有什麼區別。 – Skeith 2011-06-16 15:11:35

+0

你是什麼意思加載它們作爲一個PNG與透明加載顯示的函數適當地加載它們會生成我的圖像頂部的酒吧。 – Skeith 2011-06-16 15:13:26

+2

@Skeith,你展示的例子加載一個BMP。如果您將圖像保存爲PNG而沒有任何透明度,您將獲得相同的結果。由於您沒有向LoadTexture顯示源代碼,因此無法知道您是否正確加載透明度。 – 2011-06-16 15:19:35