![]() |
DirectX9 - Texturbreite und -höhe
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
ich möchte gerne die Breite und Höhe meiner Texturen auslesen, komme mit dem Code aus den meisten Tutorials aber nicht ganz klar. Beim Laden meiner Texturen übergebe ich für Width und Height beide Male D3DX_DEFAULT. In der MSDN steht hier nämlich: If this value is zero or D3DX_DEFAULT, the dimensions are taken from the file. ( ![]() Folgenden Code verwende ich für das Bestimmen der Breite und Höhe:
Delphi-Quellcode:
var Texture: IDirect3DTexture9; // Hier wird eine Textur mit 184 x 119 Größe geladen
Surface: IDirect3DSurface9; Desc: _D3DSURFACE_DESC;
Delphi-Quellcode:
Hier ein kleines Beispielbild, was passiert:Texture.GetSurfaceLevel(0, Surface); Surface.GetDesc(Desc); Width := Desc.Width; // = 256 Height := Desc.Height; // = 128 ![]() ![]() Der gelbe Bereich ist die tatsächliche Texturgröße, wie ich sie mit Adobe Photoshop gespeichert hab (184 x 119). Der schwarze Bereich repräsentiert die Dimensionen, die mein obiger Code liefert (256 x 128). Offensichtlich hat das Surface wohl die nächsthöheren 2er-Potenzen für die Werte von Width und Height. Ich würde aber gerne die tatsächliche Breite und Höhe abfragen. Hat mir jemand einen Tipp, wie ich an diese Werte rankomme? Über das Surface scheint es so nicht zu gehen? Vielen Dank für Tipps und Links, Xoric |
Re: DirectX9 - Texturbreite und -höhe
Intern werden Texturen meist mit Kantenlängen in 2er-Potenzen abgebildet. Ich wüsste jetzt nicht, wie man die Größe von DirectX beziehen könnte, aber du könntest sie von Hand aus dem File lesen. (Entweder mit einer entsprechenden Komponente/Klasse öffnen, oder wirklich flugs auf
![]() ...Hmmm, zumindest gibts ![]() |
Re: DirectX9 - Texturbreite und -höhe
Hi Medium :)
Naja der kleine Umweg tut mir nicht weh. Mit deinem Vorschlag hat es jedenfalls auf Anhieb wunderbar funktioniert und bin mit der Lösung sehr zufrieden. Danke einmal wieder für deine Hilfe! Du hast mich schon an einigen Stellen meines Projektes ein gutes Stück weitergebracht :) Hier wie immer der Code, mit dem sich obiges realisieren lässt:
Delphi-Quellcode:
var Info: D3DXIMAGE_INFO;
Width, Height: Cardinal;
Delphi-Quellcode:
Die ausgelesene Breite und Höhe stimmt dann tatsächlich und ist nicht auf die nächsthöhere 2er-Potenz vergrößert.
D3DXGetImageInfoFromResource(Resource.Handle, PChar('Texture01'), Info);
// Ich lade hier die Textur-Infos aus einer Ressource, alternativ D3DXGetImageInfoFromFile, um Infos aus einer Datei zu laden Width := Info.Width; Height := Info.Height; Gruß an alle, Xoric |
Re: DirectX9 - Texturbreite und -höhe
Freut mich :)
Ich weiss ja ganz gut selbst, dass es im deutschsprachigen Raum - und dann noch mit Delphi - extrem schwer ist Infos zu DirectX zu finden. Ist wohl eine sehr seltene Dreier-Kombi. Naja, und ich bin nun zwar alles andere als ein DX-Guru, hab damit aber zumindest (allerdings via C#/SlimDX) schon mal was gemacht. Da kann ich immerhin versuchen eine ganz ganz kleine Stelle in der Lücke zu schließen :stupid: Ich kann dir, wenn dir Englisch ein wenig liegt, generell auch das Forum auf ![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:56 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz