Entwickler-Ecke

Multimedia / Grafik - Transparentes Image kann die Größe nicht ändern


zongo-joe - Sa 24.07.21 18:42
Titel: Transparentes Image kann die Größe nicht ändern
Moin zusammen,
ich habe ein Bild in einem TImage (ImgSono) mit einem unveränderlichen Bild und lege ein zweites, gleich großes transparentes Image drüber, auf dem ich dann zeichne. Das zweite Image wird am Programmstart wir folgt initialisiert:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
    // Größe anpassen
    Image2.Left := imgsono.left;
    Image2.top := imgsono.top;
    Image2.width := imgsono.width;
    Image2.height := imgsono.height;
 
    // transparente Farbe festlegen, Ausfüllen und transpatent machen
    DoubleBuffered := true;
    Image2.Canvas.Brush.Color:=$FFFFFF;                       //Hintergrundfarbe, die Transparent erscheinen soll
    Image2.Canvas.FillRect(rect(0,0,Image2.Width,Image2.Height));   //mit transparenter Farbe Hintergrund füllen
    Image2.Picture.Bitmap.TransparentColor:=$FFFFFF;          //setzen der transparenten Farbe
    Image2.Picture.Bitmap.TransparentMode:=tmFixed;           //Modus
    Image2.Transparent:=true;



Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
    //Beispiel zeichnen 
    Image2.Canvas.Brush.Color:=$FFFFFF;                       //Hintergrundfarbe, die Transparent erscheinen soll
    Image2.Canvas.FillRect(rect(0,0,Image2.Width,Image2.Height));  // löschen alte Zeichnung

    Image2.canvas.pen.width := 5;     // Zeichnen
    Image2.canvas.pen.color := clred;
    Image2.canvas.moveto(x,y);
    Image2.canvas.lineto(x2,y2);

Das funktioniert auch gut. Wenn jetzt der Benutzer aber die Größe von IMGSono (das mit dem unveränderlichen Bild) ändert und ich dann die ganze Prozedur wie oben wieder aufrufe, dann ändert sich zwar die Größe des Image2 (sehe ich daran, dass MouseMove im gesamten Bereich aufgerufen wird), aber ich kann nur auf dem Teil zeichnen, der zu Anfang, beim Programmstart initialisiert wurde, aber nicht auf dem "neuen" Teil.
Weiss einer, woran das liegt ?
Grüße und Dank im voraus,
Zongo

Moderiert von user profile iconTh69: Code- durch Delphi-Tags ersetzt


Sinspin - Mo 26.07.21 10:48

Hallo,

hast du ein Clip Rect gesetzt? Das ist das einzige was mir einfällt, was ein zeichnen verhindern könnte.
Oder ist da irgendwo stretch eingestellt? Da wären dann die Koordinaten falsch.


Blup - Mi 28.07.21 10:08

Wenn sich die Größe von ImgSono ändert, passt du sicherlich auch die Größe von Image2 an.

Aber passt du auch die Größe der Bitmap in Image2 an die Größe von Image2 an?
Zeichenvorgänge mit Image2.Canvas werden auf Image2.Picture.Bitmap.Canvas umgeleitet.
Wahrscheinlich musst du die neu dazu gekommenen Bereiche beim Vergrössern auch mit der TransparentColor füllen.

Moderiert von user profile iconTh69: Delphi-Tags hinzugefügt