Autor Beitrag
[)arkSlayer
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Di 22.04.03 11:23 
high,

kann mir jemand erklären wie ich mit dieser funktion (fastblt, oder blt) ein bildausschnitt von einem bild aus einer dximaglist auf der dxdraw.surface darstellen kann?? bitte mit ein bisschen code :lol:

ok, langer satz :wink: , thx, bye
Simon Joker
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 236
Erhaltene Danke: 1



BeitragVerfasst: Do 24.04.03 11:21 
Hi [)arkSlayer



ausblenden volle Höhe Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
...
type
  TForm1 = class(TForm)
    DXDraw1: TDXDraw;
    DXImageList1: TDXImageList;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
    procedure DXDraw1Initialize(Sender: TObject);
    procedure DXDraw1Finalize(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
    FSurface:TDirectDrawSurface;
  end;

...

procedure TForm1.DXDraw1Initialize(Sender: TObject);
begin
  FSurface := TDirectDrawSurface.Create(DXDraw1.DDraw);
end;

procedure TForm1.Button1Click(Sender: TObject);
var ScrRect:TRect;
begin
   if not DXDraw1.CanDraw then exit;
   //Kann wo anders geschehen
   FSurface.SetSize(DXImageList1.Items[0].Width,DXImageList1.Items[0].Height);
   DXImageList1.Items[0].Draw(FSurface,0,0,0);
   //Festsetzen des Ausschnitts
   ScrRect.Left:=5;
   ScrRect.Top:=5;
   ScrRect.Right:=5;
   ScrRect.Bottom:=5;
   //Blitten
   DXDraw1.Surface.BltFast(0,0,ScrRect,0,FSurface);
   DXDraw1.Flip;
end;

procedure TForm1.DXDraw1Finalize(Sender: TObject);
begin
  FSurface.Free;  FSurface:=nil;
end;

...
[)arkSlayer Threadstarter
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Do 24.04.03 12:23 
danke erstma, compilieren tut der alles ohne fehler, aber wenn ich auf den button klicke komm ein violent access fehler und der zeigt mir die zeile an:
ausblenden Quelltext
1:
  DXImageList1.Items[0].Draw(FSurface,0,0,0);					


muss ich irgendwo noch was einstellen oder so?

mfg slayer, bye
Simon Joker
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 236
Erhaltene Danke: 1



BeitragVerfasst: Do 24.04.03 13:44 
Hast du sie createt? Siehe DXDraw1Initialize.
[)arkSlayer Threadstarter
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Do 24.04.03 15:37 
ich hab alles von dir übernommen...auf der form hab ich noch dxdraw-fläche mit imagelist gemacht und button druntergeknallt.

ich hab keine ahnung warum da ein fehler kommt wenn ich auf den button klicke...compilierfehler komm ja nich...

hast du's mal bei dir gestestet?

mfg slayer, bye
Simon Joker
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 236
Erhaltene Danke: 1



BeitragVerfasst: Do 24.04.03 16:02 
Yup, funzt!
Testproggi, suag hier: [url] http://www.simonjoker.de\Trans\Test3.zip [/url]
[)arkSlayer Threadstarter
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Sa 03.05.03 20:21 
re, die frage kommt zwar etwas spät :roll:,aber:

das klappt jetzt alles bei mir...nur ich kann ein bild nicht so laden:
ausblenden Quelltext
1:
DXDraw1.Surface.BltFast(-10,-10,ScrRect,0,FSurface);					

x,y sind doch integer-vars...da müsste es doch aus dem negativen bereich laden oder???

plz hlpe quickly, is wirklich wichtig, beeinflusst mein ganzen sourcecode und weiters vorgehen, PLZ, bye
[)arkSlayer Threadstarter
Hält's aus hier
Beiträge: 9



BeitragVerfasst: So 04.05.03 11:14 
ok, dann geht das halt nicht, aber jetzt noch was ;) :oops:

wie kann ich den bildausschnitt mit transparenz laden?? wenn ich die flag reinschreibe kennt er die nich: DDBLTFAST_DESTCOLORKEY....

plz, help, me, bye
Simon Joker
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 236
Erhaltene Danke: 1



BeitragVerfasst: Mo 05.05.03 08:54 
Hi [)arkSlayer

1. Negative Werte werden BLTFast nicht unterstützt. Die musst du vorher bei SourceRechteck berücksichtigen.

2. Funktioniert wahrscheinlich nicht, weil du der DXDraw.Surface keinen Colorkey zugewiesen hast. Ich habe es mit DDBLTFAST_SRCCOLORKEY probiert und das tuts.

Du kannst auch die zusätzliche Surface sparen. Verwende einfach die des ImageListItems. Hier ist der Colorkey die Eigenschaft TransparentColor.

DXDraw1.Surface.BltFast(0,0,ScrRect,DDBLTFAST_SRCCOLORKEY,DXImageList1.Items[0].PatternSurfaces[0]);