Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi anzahl pixel bei image1.strech:= true (https://www.delphipraxis.net/7871-anzahl-pixel-bei-image1-strech-%3D-true.html)

iaby 23. Aug 2003 15:24


anzahl pixel bei image1.strech:= true
 
hallo zusammen,

ich habe folgendes problem:
ich habe eine image komponente, die nur einen balken darstellt. sie verändert ihre breite mit der form. damoit das bild immer schön dargestellt ist, habe ich strech auf true gesetzt. nun versuche ich, eine linie auf die image komponente zu zeichnen, allerdings habe ich nur genaus so viel pixel, wie das geladene bild pixel hat!
gewünscht hätte ich mir das ich nun so viele pixel in x-richtung habe,wie die komponente breit ist! geht das irgendwie?

gruss,
iaby

Matze 23. Aug 2003 16:57

Re: anzahl pixel bei image1.strech:= true
 
Hi!

Ich weiß es auch nicht. :(

Aber du könntest ja über das Image ein weiteres Image legen und dann auf dieses die Linie zeichnen.

Gruß Matze

Stanlay Hanks 23. Aug 2003 17:05

Re: anzahl pixel bei image1.strech:= true
 
Hi. Naja...wenn du soviele Pixel haben willst wie die Komponente breit ist, dann müsste dir eigentlich ImageX.Width weiterhelfen...:wink:
D.h. wenn ich dich richtig verstanden hab...

Man liest sich, Stanlay :hi:

Gandalfus 23. Aug 2003 19:03

Re: anzahl pixel bei image1.strech:= true
 
Zitat:

Zitat von iaby
nun versuche ich, eine linie auf die image komponente zu zeichnen

Auf eien Image komponete zeichnet man nicht die ist nur zur darstellung von Bildern gut.
Benutze lieber eine Paintbox (onpaint) und strechdraw.

Stanlay Hanks 23. Aug 2003 19:43

Re: anzahl pixel bei image1.strech:= true
 
Auf eine Image sollte man nicht zeichnen, aber man kann :wink:

Gandalfus 23. Aug 2003 20:34

Re: anzahl pixel bei image1.strech:= true
 
Allerdings man kann einige komische Sachen machen z.B:

Zitat:

Zitat von Matze
Aber du könntest ja über das Image ein weiteres Image legen und dann auf dieses die Linie zeichnen.


Christian Seehase 23. Aug 2003 21:06

Re: anzahl pixel bei image1.strech:= true
 
Moin iaby,

wenn Du auf dem Image zeichnen willst, steht Dir dafür dessen Canvas zur Verfügung, und dessen Breite (die des ClipRect) wird durch die Breite des Bildes festgelegt.

Unter Hier im Forum suchenClipRect solltest Du hier etwas dazu finden. Ich hatte schon einmal etwas ähnliches nachgefragt.

iaby 25. Aug 2003 12:41

Re: anzahl pixel bei image1.strech:= true
 
also das mit dem ClipRect ist mir irgendwie zu hoch!
ich habe jetzt mal das bild größer gemacht, und jetzt ist es eigentlich nicht schlecht, aber eben unsauber gelöst.
ich bleibe aber drann und schaue mal nach besseren lösungen (ClipRect?)

danke und nen gruss,
iaby

iaby 26. Aug 2003 11:16

Re: anzahl pixel bei image1.strech:= true
 
ich hab das problem jetzt mal mit einer PaintBox gelöst.
allerdings verschwindet das gezeichnete wieder, wenn ich mit einem anderen fenster die paintbox verdeckte, oder sie einfach aus dem bildschirm herausschiebe!
gibt es da eine property die das verhindert oder wie kann ich das anstellen?
sollte ich doch lieber auf eine Image komponente zeichnen?

gruss,
iaby

Gandalfus 26. Aug 2003 14:23

Re: anzahl pixel bei image1.strech:= true
 
Zitat:

Zitat von Gandalfus
Auf eien Image komponete zeichnet man nicht die ist nur zur darstellung von Bildern gut.
Benutze lieber eine Paintbox (onpaint) und strechdraw.

onpaint

iaby 28. Aug 2003 09:21

Re: anzahl pixel bei image1.strech:= true
 
also die property strechdraw hab ich nicht gefunden.
und die englische hilfe zu onPaint hab ich nicht kapiert(was ich wahrscheinlich auch auf deutsch nicht gemacht hätte)
könnte ich das noch mal genauer haben, bitte?

gruss,
iaby

Gandalfus 28. Aug 2003 12:12

Re: anzahl pixel bei image1.strech:= true
 
Delphi-Quellcode:
procedure TForm1.PaintBox1Paint(Sender: TObject);
begin
  PaintBox1.Canvas.StretchDraw(PaintBox1.ClientRect,Image1.Picture.Graphic);
end;
Wo ist das Problem?

[edit=Daniel B]Delphi-Tags korrigiert. Mfg, Daniel B[/edit]

iaby 28. Aug 2003 12:48

Re: anzahl pixel bei image1.strech:= true
 
ich zeichne aber selbst auf die paintbox, und lade nicht nur ein image!
die paintbox stellt bei mir einen fortschrittsbalken dar. wenn ich nun gerade eine zeit lang nicht drauf zeichne und die paintbox mit etwas anderem überdecke, dann wir ihr inhalt wieder weiß. würde ich das auf ein image zeichnen, hätte ich dieses problem nicht.

gruss,
iaby

Matze 29. Aug 2003 09:21

Re: anzahl pixel bei image1.strech:= true
 
@Gandalfus: Ich hab das irgendwie falsch verstanden.

Ich habe es so verstanden, dass er ein Bild auf dem Image hat, und er aus das Selbe Image eine Linie zeichnen will. :(

Gandalfus 29. Aug 2003 13:23

Re: anzahl pixel bei image1.strech:= true
 
Du benutzt ein TBitmap als zwischen speicher. Dadurch kann es auch nicht flimmern.

Delphi-Quellcode:
var
  Backbild: TBitmap;

//dürfte klar sein
procedure TForm1.PaintBox1Paint(Sender: TObject);
begin
  PaintBox1.Canvas.Draw(0,0,backbild);
end;

//Bitmap initializeren und bild aus Imag11 auf das Bitmap kopieren
procedure TForm1.FormCreate(Sender: TObject);
begin
  Backbild := TBitmap.Create;
  Backbild.Width := PaintBox1.Width;
  Backbild.Height := PaintBox1.Height;
  Backbild.Canvas.StretchDraw(Rect(0,0,Backbild.Width,Backbild.Height),Image1.Picture.Graphic);
end;

//beim beenden freigeben
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Backbild.Free;
end;

//hier ein Beispiel zum linien zeichnen
procedure TForm1.Button1Click(Sender: TObject);
begin
  Backbild.Canvas.Pen.Color := clred;
  Backbild.Canvas.MoveTo(1,1);
  Backbild.Canvas.lineto(25,25);
  PaintBox1.Canvas.Draw(0,0,backbild);
end;
Ich schreib hier ja bald dein ganzes Programm...

@Maze: Ich will da jetzt nicht draufrumhacken aber deine Lösung ist nicht gerade ideal.(meine ist sicher auch nicht perfekt)

Matze 29. Aug 2003 13:29

Re: anzahl pixel bei image1.strech:= true
 
@Gandalfus: Meines ist gar keine Lösung!! :shock: ;)

Jens Schumann 29. Aug 2003 13:39

Re: anzahl pixel bei image1.strech:= true
 
Hallo Gandalfus,
die Methode mit der Bitmap als Zwischenspeicher ist sogar ziemlich gut.
Wenn Du jetzt eine BitBlt API-Funktionen und nicht Canvas.Draw nehmen würdest, wäre die Lösung soage ziemlich ziemlich gut.
Die BitBlt sind erheblich schneller

Ach ja. Im OnPaint Event der PaintBox solltest ebenfalls die Bitmap zeichnen lassen.

Gandalfus 29. Aug 2003 14:35

Re: anzahl pixel bei image1.strech:= true
 
Zitat:

Zitat von Jens Schumann
Hallo Gandalfus,
die Methode mit der Bitmap als Zwischenspeicher ist sogar ziemlich gut.
Wenn Du jetzt eine BitBlt API-Funktionen und nicht Canvas.Draw nehmen würdest, wäre die Lösung soage ziemlich ziemlich gut.
Die BitBlt sind erheblich schneller

Ich hab bewusst draw genommen ist für Anfänger leichter.

Delphi-Quellcode:
BitBlt(Painbox1.canvas.handle, 0, 0, backbild.witdh, backbild.height, backbild.Canvas.Handle, 0, 0, srccopy);
als Alternative zu draw.

Zitat:

Ach ja. Im OnPaint Event der PaintBox solltest ebenfalls die Bitmap zeichnen lassen.
Hab ich doch


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:59 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz