#1 31.01.2005 18:55:03

Coolcat
ProGuru
Ort: Aachen, NRW
Registriert: 24.01.2005
Beiträge: 2780
Web-Seite

TEditTex - Klasse zum bearbeiten von Texturen

Eine Klasse zum bearbeiten von Texturen. Sie ist für Anwendungen gedacht bei denen es NICHT auf die Geschwindigkeit ankommt, und man einfach nur bequem per "2D-Array" auf die Textur zugreifen will.
Also beispielsweise ein Textureditor oder wenn man einfach nur schnell einen Alpha-Channel in einem Bitmap (*.bmp) speichern möchte oder auch nur Texturen per Programm übereinander blenden (weil es 150 Stück sind und man von Hand ewig bräuchte) will....

vielleicht weiß ja jemand etwas damit anzufangen.... smile

Die Klasse ist relativ selbst erklärend, aber wer Fragen hat darf sie gerne hier stellen....
Schnittstelle

Code:

// Konstruktor / Destruktor
constructor Create( texture: IDirect3DTexture9 );
destructor Destroy; override;

// setzen auf ein anderes Texturobjekt
function SetTexture( texture: IDirect3DTexture9 ): HResult;

// locken, unlocken
function Lock: HResult;
function UnLock: HResult;

// komplette Textur mit einer Farbe füllen
procedure FillTextur( Color: TD3DXCOLOR );

// Eigenschaften der Textur auslesen
property GetWidth: Integer read Width;
property GetHeight: Integer read Height;
property GetFormat: TD3DFormat read Format;

// Zugriff auf die Textur
property Pixels[ u, v: integer ]: TD3DXCOLOR read GetTexturPixel write SetTexturPixel; default;



Beispiel

Code:

// Laden..
D3DXCreateTextureFromFileEx( .... , bmp1tex );
D3DXCreateTextureFromFileEx( .... , bmp2tex );

// TEditTex-Objekte erzeugen
bmp1 := TEditTex.Create( bmp1tex );
bmp2 := TEditTex.Create( bmp2tex );

// beide locken
bmp1.Lock;
bmp2.Lock;

///////////////////////////////////////////////////////////////////////////
// Insert your Pixelwork here

// Set AlphaChannel of bmp1tex to the Red-Channel of bmp2tex
for y:=0 to Height-1 do begin
  for x:=0 to Width-1 do begin
    color := bmp1[x,y];
    color.a := bmp2[x,y].r;
    if &#40;color.a < 0&#41; then color.a &#58;= 0;
    if &#40;color.a > 1&#41; then color.a &#58;= 1;
    bmp1&#91;x,y&#93; &#58;= color;
  end;
end;

///////////////////////////////////////////////////////////////////////////
// Free

// unlocken
bmp1.UnLock;
bmp2.UnLock;

// speichern
D3DXSaveTextureToFile&#40; ... , bmp1tex, ... &#41;;

// Speicher freigeben
bmp1.Free;
bmp2.Free;
bmp1tex &#58;= nil;
bmp2tex &#58;= nil;



Hinweise

Zitat:

Für optimale Geschwindigkeit sollten Zugriffe auf die Textur immer Zeilenweise von links nach rechts erfolgen (nicht Spaltenweise). Die Zeilen sollten ebenso von oben nach unten gelesen werden.
Wenn nur ein einzelner Pixel gelesen/geschrieben werden soll, braucht Lock bzw. UnLock nicht ausgeführt zu werden, da dies dann automatisch geschieht.
Werden mehrere Pixel gelesen/geschrieben ist es jedoch empfehlenswert die Zugriffe auf die Textur mit Lock / Unlock zu umschließen.

64bit-Formate werden nicht unterstützt!
(z.B.: D3DFMT_A16B16G16R16 )

Coolcat


Attachments:
Attachment Icon unitTEditTex.pas, Größe: 13,180 bytes, Downloads: 937

My software never has bugs. It just develops random features.

Offline

 

#2 31.01.2005 18:58:49

Martin Pyka
Member
Ort: Münster
Registriert: 24.01.2005
Beiträge: 95
Web-Seite

Re: TEditTex - Klasse zum bearbeiten von Texturen

ähm....ich glaube, du hast den upload vergessen smile

Offline

 

#3 31.01.2005 19:00:23

Coolcat
ProGuru
Ort: Aachen, NRW
Registriert: 24.01.2005
Beiträge: 2780
Web-Seite

Re: TEditTex - Klasse zum bearbeiten von Texturen

ich kann irgendwie nix hochladen ich wollte erstmal den text sichern....

kommt irgendwie ne Fehlermeldung beim Upload...
Christian bastelst du vielleicht gerade irgendwas?

Edit: Fehler behoben.
Es lag wohl irgendwie an den Schreibrechten


My software never has bugs. It just develops random features.

Offline

 

Brett Fußzeile

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson