AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Auf die Komponente Image malen?

Auf die Komponente Image malen?

Ein Thema von loirad · begonnen am 5. Okt 2012 · letzter Beitrag vom 5. Okt 2012
 
Popov
(Gast)

n/a Beiträge
 
#16

AW: Auf die Komponente Image malen?

  Alt 5. Okt 2012, 16:24
@loirad

Bist du das der mal gefragt hat wie man einen Bilderrahmen zeichnen kann?

Was du hier versuchst ist eigentlich nicht so schwer, aber doch schon etwas komplexer. Du versuchst aber zu sehr den einfachen Weg zu gehen und der klappt nicht. Manchmal sollte man stoppen und ein Schritt zurück gehen.

Also vorausgesetzt ich habe dein Problem richtig verstanden, dann beschreibe ich dir deinen Fehler. Du hast eine 2000x2000 Pixel große Bitmap die du in eine Image lädst. Die Image skalierst du auf 500x500 Pixel. Nun willst du auf dem Bild einen Bilderrahmen zeichnen. Das klappt aber nicht so richtig, denn die Pixel auf der Image entsprechen nicht der von dir eingestellten Größe. Der Grund ist der: auch wenn die Image das Bild skaliert, ist das Bild im Speicher immer noch das Originalbild, z. B 2000x2000 Pixel. Wenn du da jetzt einen Rahmen von 4 Pixeln zeichnest, dann ist der auf der Image 1 Pixel groß. Der Grund: du hast auf der Originalgrafik gezeichnet und die wurd von der Image skaliert. Dabei ist es egal ob du direkt auf Image.Canvas zeichnest. Wie gesagt, du zeichnest da trotzdem auf der Bitmap.

Lösung: du lädst dein Bild in eine TBitmap und skalierst es manuell sie auf 500x500. Dann übergibst du sie an die TImage und schaltest vorher Scale ab. Jetzt kannst du auf der TImage zeichnen und zwei Pixel sind dann auch zwei Pixel dick.


//Eidit:

Hier ein kleines Beispiel

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  i, x, y: Integer;
begin
  Image1.Width := 105; //Größe der Image
  Image1.Height := 105;

  Image1.Picture.Bitmap.Width := 210; //Größe der Bittmap, doppelt
  Image1.Picture.Bitmap.Height := 210;

  Image1.Stretch := True;

  for x := 0 to 105 {Width} do
    for y := 0 to 105 {Height} do
      Image1.Picture.Bitmap.Canvas.Pixels[x, y] := clBlack;

  {Obwohl Image1 105 Pixel groß ist, wird nur ein viertel gezeichnet}
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  Image1.Stretch := not Image1.Stretch;
end;
In dem Beispiel soll das ganze Bild geschwärzt werden, wird aber nur ein viertel, auch wenn die Image Größe und die Schleife gleiche Werte haben.

Geändert von Popov ( 5. Okt 2012 um 16:30 Uhr)
  Mit Zitat antworten Zitat
 

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:58 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