![]() |
image
hai
kann man irgendwie ein image perspektivisch darstellen?? |
Re: image
Meinst du so etwas:
![]() In meinem ersten Posting gibt es einen Sourcecode für das Coverflow mit GR32. Da kannst du die Funktion PaintCover verwenden, um ein Bild perspektivisch zu zeichnen! //edit: Die hier meine ich:
Delphi-Quellcode:
procedure PaintCover(DestBitmap:TBitmap32;x,y,width,height:integer;perspectiv:single;angle:integer;picture:TBitmap32);
var lo,lu,ro,ru:TPoint; mo,mu:extended; i,j:integer; dummy:integer; begin //vier Eckpunkte des Covers berechnen: lo.x:=x; lo.Y:=y; lu.X:=x; lu.Y:=y+height; ru.x:=round(lu.x+width*cos(abs(angle)/360*2*Pi)); ru.y:=round(lu.y-perspectiv*height/2*sin(abs(angle)/360*2*Pi)); ro.X:=ru.x; ro.Y:=round(ru.y-height+perspectiv*height*sin(abs(angle)/360*2*Pi)); if angle<0 then begin dummy:=ro.y; ro.y:=lo.y; lo.y:=dummy; dummy:=ru.y; ru.y:=lu.y; lu.y:=dummy; dummy:=(width-(ro.x-lo.x)); lo.x:=lo.x+dummy; lu.x:=lu.X+dummy; ro.x:=ro.X+dummy; ru.x:=ru.x+dummy; end; //Steigung der oberen und unteren Kante berechnen: mo:=-(ro.Y-lo.Y)/(ro.x-lo.X); mu:=-(ru.Y-lu.Y)/(ru.x-lu.x); //bild zeichnen: DestBitmap.BeginUpdate; DestBitmap.Clear(clblack); for i:=0 to (ro.X-lo.x) do for j:=round(-i*mo) to round((lu.Y-lo.y)+i*mo) do DestBitmap.Pixel[lo.X+i,lo.Y+j]:=round(picture.Pixels[round(picture.Width/(ro.x-lo.X)*i),round(picture.Height/((lu.Y-lo.y)+2*i*mo)*(j+i*mo))]); //Rechteck zeichnen: with DestBitmap do begin pencolor:=clsilver; moveto(lo.x,lo.y); linetos(lu.x,lu.y); linetos(ru.x,ru.y); linetos(ro.x,ro.y); linetos(lo.x,lo.y); end; DestBitmap.EndUpdate; end; |
Re: image
Liste der Anhänge anzeigen (Anzahl: 1)
es kommt schon direkt en fehler
| | | |
Re: image
Entweder Du installierst die Graphics32-Bibliothek oder Du benennest TBitmap32 in TBitmap um, dann wird das ganze aber sehr langsam. :zwinker:
|
Re: image
@Die Muhkuh...ich die funktion linetos, die tbitmap nicht hat, da bringt das umbenennen nix...
:) Wie oben geschrieben, benötigst du - für den Code noch die Units von GR32. Das sind erweiterte Grafikkomponenten für Delphi die mehr und viel schnellere Funktionen bieten, als die Standard-Delphi Funktionen. Lad dir das erstmal runter und installier es: ![]() |
Re: image
wie geht das installieren ? sorry hab ich noch nie gemacht
|
Re: image
Hier die Anleitung von der Seite! Viel Erfolg!
![]() |
Re: image
so habs installiert danke^^
|
Re: image
sorry das ich so viele fragen stelle doch jetz kommt imma noch das vonvorhin
|
Re: image
Zeig mal Deinen kompletten Quelltext
|
Re: image
ei den der mir alleinherrscher geschickt hat
|
Re: image
Zitat:
|
Re: image
Die entsprechenden Units der GR32 sind aber eingebunden?
|
Re: image
Zitat:
|
Re: image
Vermutlich :mrgreen:
|
Re: image
oh sorry vergessen wieder hin zu schreiben mein delphi war hängen geblieben un hab dann nid wieder eingefügt
doch wie benutz ich die procedure? |
Re: image
Lad Dir doch das Beispielprojekt aus dem verlinkten Thread herunter und schau Dir den Source an.
|
Re: image
ja mein pc is hängen beblieben un dann war das projekt weg hab dann aber vergessen sie wieder einzufügen :-)
doch wie benutz ich die procedure sorry das ich doppelt geschrieben hab hab gedacht der eintrag wäre nich angekommen |
Re: image
Zitat:
|
Re: image
Liste der Anhänge anzeigen (Anzahl: 1)
beim öffnen kommt schon dies hier
. |
Re: image
Einfach auf alle Ignorieren drücken.
|
Re: image
danke^^
|
Re: image
Und bitte gib deinem Thread das nächste mal einen aussagekräftigen Titel.
|
Re: image
Man benutzt die Procedure ganz einfach:
1) Da du jetzt ja die GR32 installiert hast, kannst du ein TImage32 anstelle eines TImage auf dein Formular ziehen. (Das hat jetzt sagen wir mal den namen Image321) 2) Erstelle eine Prozedur, die ein TBitmap32 einliest aus irgendwelchen Dateien von dir, also z.B.
Delphi-Quellcode:
3) Rufe jetzt die PaintCover Procedur auf:
procedure TForm1.ButtonClick(Sender:TObject);
var aBmp32:TBitmap32; begin aBmp32:=TBitmap32.create; //erstmal das Objekt erstellen aBmp32.loadfromfile('dateiname.bmp');
Delphi-Quellcode:
DestBitmap ist das Bitmap, wo die Procedur das perspektivische Bild hinzeichnen soll. x,y,width und height sind die Positionsangaben in DestBitmap für das perspektivische Bild.procedure PaintCover(DestBitmap:TBitmap32;x,y,width,height:integer;perspectiv:single;angle:integer;picture:TBitmap32); Perspectiv ist ein Wert zwischen 0 und 1, der festlegt wie stark perspektivisch das Bild dargestellt werden soll (also die Tiefenwirkung) angle ist der Winkel zwischen 0 und 90 grad. d.h. in unserem Beispiel könntest du die PaintCover funktion so aufrufen:
Delphi-Quellcode:
Und dann sollte eigentlich schon was zu sehen sein....
PaintCover(Image321.Bitmap,0,0,50,50,0.5,30,aBmp32);
|
Re: image
Liste der Anhänge anzeigen (Anzahl: 1)
jetz kommt das
|
Re: image
Jetzt kommt das "Debuggen" :) kann sein, dass Gr32 da auf n Error läuft, weil du auf Pixel zugreifen willst, die außerhalb deines Images liegen (also wenn das beispielsweise nur 30x30 Pixel groß ist, und wir aber eine Width und Height von 50 in PaintCover angegeben haben)
|
Re: image
---oh man bin ich ein schussel heute abend --- *verurteilt im Sinne der Anklage wegen einem überflüssigen post*
|
Re: image
ja das is logisch doch mein image is größer als 50 un es kommt trotzdem
|
Re: image
Wollte nur mal kurz darauf hinweisen, dass die GR32 schon sehr leistungsfähige Transformations-Funktionen eingebaut haben. Von Skalierung über Drehung bis zu freier Verformung ist eigentlich alles damit möglich. Es gibt dazu auch eine Demo.
|
Re: image
@LEE1: Ohne SourceCode Einblicke wird das etwas schwierig mit dem Helfen, glaub ich...
|
Re: image
ok hier ist der code
Delphi-Quellcode:
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls,GR32, GR32_Image; type TForm1 = class(TForm) Button1: TButton; Image321: TImage32; procedure Button1Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation procedure PaintCover(DestBitmap:TBitmap32;x,y,width,height:integer;perspectiv:single;angle:integer;picture:TBitmap32); var lo,lu,ro,ru:TPoint; mo,mu:extended; i,j:integer; dummy:integer; begin //vier Eckpunkte des Covers berechnen: lo.x:=x; lo.Y:=y; lu.X:=x; lu.Y:=y+height; ru.x:=round(lu.x+width*cos(abs(angle)/360*2*Pi)); ru.y:=round(lu.y-perspectiv*height/2*sin(abs(angle)/360*2*Pi)); ro.X:=ru.x; ro.Y:=round(ru.y-height+perspectiv*height*sin(abs(angle)/360*2*Pi)); if angle<0 then begin dummy:=ro.y; ro.y:=lo.y; lo.y:=dummy; dummy:=ru.y; ru.y:=lu.y; lu.y:=dummy; dummy:=(width-(ro.x-lo.x)); lo.x:=lo.x+dummy; lu.x:=lu.X+dummy; ro.x:=ro.X+dummy; ru.x:=ru.x+dummy; end; //Steigung der oberen und unteren Kante berechnen: mo:=-(ro.Y-lo.Y)/(ro.x-lo.X); mu:=-(ru.Y-lu.Y)/(ru.x-lu.x); //bild zeichnen: DestBitmap.BeginUpdate; DestBitmap.Clear(clblack); for i:=0 to (ro.X-lo.x) do for j:=round(-i*mo) to round((lu.Y-lo.y)+i*mo) do DestBitmap.Pixel[lo.X+i,lo.Y+j]:=round(picture.Pixels[round(picture.Width/(ro.x-lo.X)*i),round(picture.Height/((lu.Y-lo.y)+2*i*mo)*(j+i*mo))]); //Rechteck zeichnen: with DestBitmap do begin pencolor:=clsilver; moveto(lo.x,lo.y); linetos(lu.x,lu.y); linetos(ru.x,ru.y); linetos(ro.x,ro.y); linetos(lo.x,lo.y); end; DestBitmap.EndUpdate; end; {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); var aBmp32:TBitmap32; begin aBmp32:=TBitmap32.create; //erstmal das Objekt erstellen aBmp32.loadfromfile('cover.bmp'); PaintCover(Image321.Bitmap,0,0,50,50,0.5,30,aBmp32) end; end. |
Re: image
Sry, hab noch vergessen, das Bitmap in Image321 zu erstellen.
Ersetz den Code von Button1Click mal bitte durch diesen hier:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var aBmp32:TBitmap32; begin aBmp32:=TBitmap32.create; //erstmal das Objekt erstellen aBmp32.loadfromfile('c:\Test.bmp'); Image321.Bitmap:=tbitmap32.create; Image321.Bitmap.Width:=image321.clientWidth; Image321.bitmap.height:=image321.clientheight; PaintCover(Image321.Bitmap,1,1,150,150,0.5,30,aBmp32) end; |
Re: image
Liste der Anhänge anzeigen (Anzahl: 1)
juhu es klappt doch beim zweiten start passierte dies hier
(problem hab ich sau oft) |
Re: image
Dann wird das Programm noch im Hintergrund laufen und du möchtest neu kompilieren, da das Programm aber noch läuft, kann die exe-Datei nicht überschrieben werden.
|
Re: image
es läuft aber nidd mehr
|
Re: image
Da kommt aber doch normalerweise "Quellcode wurde geändert. Neu kompilieren?" oder so ähnlich :gruebel:
[edit] @LEE1: Hast Du es mal mit "Projekt erzeugen" versucht? [/edit] |
Re: image
ja geht aber auch nidd hab delphi mal geschlossen un 3 min gewartet geht ava immer noch nidd
|
Re: image
Zitat:
Also bei mir zeigt er den Fehler an, wenn ich z.B. das Verzeichnis, in welchem das Programm kompiliert habe, im Netzwerk freigegeben habe und die exe auf einem Netzwerkrechner noch läuft. Dann hat Delphi quasi keine Schreib bzw. Löschrechte für die alte echse... |
Re: image
...nicht immer. Nur wenn das Programm am Breakpoint angehalten wurde und der Quellcode verändert ist kommt diese Meldung.
Beim normalen "Neucompilieren" weigert sich Delphi die laufende Exe zu überschreiben (logisch) :zwinker: upps... Bezug auf "Quellcode wurde geändert. Neu kompilieren?" |
Re: image
Schreibrechte hast Du in den entsprechenden Verzeichnissen (Ausgabe- und Source-Verzeichnis)? Geht es als Admin?
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:33 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