AGB  ·  Datenschutz  ·  Impressum  







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

Auf die Komponente Image malen?

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

n/a Beiträge
 
#11

AW: Auf die Komponente Image malen?

  Alt 5. Okt 2012, 17:01
@loirad

Was verstehst du unter Skalierung des Bildes? Wenn du darunter die Skalierung des TImage meinst, dann hat die keinen Einfluss auf die Bitmap.

Als erstes solltest du dir abgewöhnen Begriffe wie Bild zu nutzen, da man damit nicht ganz sicher zuordnen kann was du meinst. TImage stellt nur eine Grafik visuell dar. Das kann eine Bitmap, Jpeg oder auch andere Formate sein. Sag also direkt was du meinst, die TImage oder TBitmap. Das sind zwei paar Schuh, auch wenn sie verwandt sind.

Als Anfänger würde ich es mir abgewöhnen auf der TImage.Canvas zu zeichnen, auch wenn es geht. Du kommst nur durcheinander. Zeichne gleich auf der TImage.Picture.Bitmap.Canvas, dann gibt es auch keine Missverständnisse. Denn auch wenn du auf TImage.Canvas zeichnest, so zeichnest du tatsächlich auf der TImage.Picture.Bitmap.Canvas. Hier ist Bitmap die Voreinstellung und wenn du direkt auf TImage.Canvas zeichnest, dann wird eine Bitmap von den Dimensionen erstellt. Das kann aber auch mal nicht klappen und dann wunderst du dich wieso es nicht klappt. Also lieber alles selber machen und auf der sicheren Seite sein.
  Mit Zitat antworten Zitat
loirad

Registriert seit: 25. Nov 2009
135 Beiträge
 
Delphi 6 Professional
 
#12

AW: Auf die Komponente Image malen?

  Alt 5. Okt 2012, 17:07
@Popov: Ok, geht klar!

@Bummi: TImage ist über den Objektinspektor gestrecht auf 500*500. Und auf das TImage soll ein Rahmen (mit Canvas) an einer bestimmten Position, unabhängig davon, welches TBitmap darauf liegt!
Wer Fehler findet darf sie behalten!
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#13

AW: Auf die Komponente Image malen?

  Alt 5. Okt 2012, 17:12
Gestrecht ist ganz schlecht. wenn das Bild nicht quadratisch ist, führt das unweigerlich zu verschieden dicken Linien.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.056 Beiträge
 
Delphi 12 Athens
 
#14

AW: Auf die Komponente Image malen?

  Alt 5. Okt 2012, 17:15
TPaintBox und TLabel haben keine eigene Zeichenfläche.

Diese zeichnen sich immer auf dem Canvas ihres Parents.
Und darum landen ihre Bilder quasi auch im Hintergrund.
TImage macht es zwar auch so, aber im Gegensatz zur TPaintBox hat es einen Puffer, wo das Bild immer wieder herkommt (z.B. das interne Bitmap) und dieser ist langlebiger als das ungepufferte Bild der TPaintBox.

Du könntest ein weiteres TImage drüberlegen.
Oder wie wäre es mit TShape, bzw. TBevel? (ich weiß jetzt aber nicht wie TBevel arbeitet ... nicht daß dieses auch im Hintergrund landet)
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#15

AW: Auf die Komponente Image malen?

  Alt 5. Okt 2012, 17:21
meinst Du so etwas?
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)

Geändert von Bummi ( 5. Okt 2012 um 18:21 Uhr)
  Mit Zitat antworten Zitat
loirad

Registriert seit: 25. Nov 2009
135 Beiträge
 
Delphi 6 Professional
 
#16

AW: Auf die Komponente Image malen?

  Alt 5. Okt 2012, 17:22
@mkinzler: Ich hatte vergessen zu erwähnen, dass Proportional auch auf true ist!

@himitsu: Vielen Dank für den Hinweis Mit Image habe ich es auch schon probiert, da wird aber der Hintergrund weiß, und das Bild dahinter kann man dann nicht sehen. Ich werds mal mit einem TShape probieren!

@Bummi: Ja so in etwa ja!
Wer Fehler findet darf sie behalten!
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#17

AW: Auf die Komponente Image malen?

  Alt 5. Okt 2012, 17: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 17:30 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.056 Beiträge
 
Delphi 12 Athens
 
#18

AW: Auf die Komponente Image malen?

  Alt 5. Okt 2012, 17:26
Wenn du ein Bitmap im TImage hast, dann mußt du natürlich die Transparenz im TImage aktivieren.

- entweder fest auf die Farbe eingestellt, welche transparent sein soll (z.B. dein Weiß aka clWhite)
- oder die Farbe wird automatisch gewählt (ich glaube Anhand des Pixels, welches inten Links im Bitmap drin ist ... also das erste Pixel, denn diese Bitmaps werden von unten nach oben gespeichert)
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#19

AW: Auf die Komponente Image malen?

  Alt 5. Okt 2012, 17:38
Da Du die einfache Lösung suchst ...
Angehängte Dateien
Dateityp: zip src.zip (104,9 KB, 26x aufgerufen)
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 23: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