Entwickler-Ecke
Multimedia / Grafik - Canvas Größe ändern
mg4all - Mi 29.12.10 08:27
Titel: Canvas Größe ändern
Hallo Leute !
Habe wieder mal eine grundlegende Frage :
In meinem Spiel werden Figuren auf einem TImage plaziert (wenn die Farbe <> clfuchsia ist). Alles kein Problem, wenn sich aber die Bildschirmauflösung ändert und ich TImage.strech = true; gesetzt habe bleibt meine Figur auf der gleichen Höhe stecken, kann mir jemand sagen wo das Problem liegt ?
Hier noch ein bischen Quelltext :
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| procedure TForm3.raupesetzen; for i := 0 to 5000 do if spielfeld.Canvas.Pixels[image1.left,i] <> clfuchsia then begin image1.Top := i - image1.Height; break; end; end; |
:?: :?: :?: :?: :?: :?: :?: :?:
Moderiert von
Narses: Code- durch Delphi-Tags ersetztModeriert von
Martok: Topic aus VCL (Visual Component Library) verschoben am Mi 29.12.2010 um 16:04
JDKDelphi - Mi 29.12.10 09:07
Hallo,
ich hatte mal so gelöst:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21:
| procedure TAXBitmap.RefreshAX; var abmp : TBITMAP; x,y : integer; begin x := width; y := height; image1.Width := x; image1.Height:= y; fgui.USR_WINDOW(0,x,0,y); fgui.USR_SCALE(-1,flength,fwidth,-1); abmp := tbitmap.Create; abmp.Height := image1.Height; abmp.Width := image1.Width; image1.Picture.Bitmap := abmp; abmp.Free; fgui.Move_2D(0,0,image1.Canvas); end;
|
Gruß
mg4all - Fr 31.12.10 00:59
:D Danke für die Antworten :D
Ich habe das Problem jetzt so gelöst :
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| procedure TForm3.spielfeldwandeln; var tmpbmp: TBitmap; rechteck: TRect; begin rechteck.Left := 0; rechteck.Top := 0; rechteck.Right := form3.ClientWidth; rechteck.Bottom := form3.ClientHeight; tmpbmp := TBitmap.Create; tmpbmp.Width := form3.ClientWidth; tmpbmp.Height := form3.ClientHeight; tmpbmp.Canvas.StretchDraw(rechteck,spielfeld.Picture.Graphic); BitBlt(spielfeld.Canvas.Handle,0,0,screen.Width,screen.Height,tmpbmp.Canvas.Handle, 0, 0, SRCCOPY); spielfeld.Picture := nil; spielfeld.Picture.Bitmap := tmpbmp; tmpbmp.Free; end; |
Und hiermit hatte ich Erfolg:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| procedure TForm3.raupesetzen; begin image1.Left := 5; for i := 1 to 5000 do if spielfeld.Canvas.Pixels[image1.left,i] <> clfuchsia then begin image1.Top := i - image1.Height; break; end; end; |
Wenn Jemand eine andere Lösung hat die schneller ist, bitte Posten :!: :!: :!:
platzwart - Fr 31.12.10 01:34
Benutz die graphics32. Das ist eine Sammlung von Komponenten für Grafik (Image, Paintbox, Bitmap, also alles, was Delphi auch so hat, bloß sind diese Komponenten unglaublich schnell).
Abgesehen davon solltest du mit Scanline arbeiten, einfach mal danach suchen ;)
der organist - Fr 31.12.10 10:54
wofür hast du da ein break drin? So ne for schleife mit Abfrage lässt sich doch auch mit ner while-Schleife vereinfachen...
Delphi-Quelltext
1: 2: 3:
| k:=1; while((k<5001)AND(spielfeld.Canvas.Pixels[image1.left,i] <> clfuchsia))then image1.Top:=k-image1.Height; |
jaenicke - Fr 31.12.10 11:41
Ich frage mich eigentlich eher, ob man das ganze nicht auch anders lösen kann. Wofür dient denn diese Abfrage nach einer Farbe?
Das sieht fast so aus als würdest du damit quasi versuchen zu kompensieren, dass du vergessen hast die Daten zu speichern was bisher passiert ist. :gruebel: Wenn dem so ist, ist das so ungefähr die ungünstigste und langsamste Lösungsmöglichkeit, die mir einfällt...
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!