![]() |
Bild skalieren
Sers,
Ich weiß nicht ob der Titel stimmt. Ich habe eine Anwendung, sie ist, z.B. 50 Hoch und 50 Breit, auf dem Formular dieser Anwendung habe ich ein Bild was auch 50 Hoch und 50 Briet ist. Nun möchte ich das wenn ich das Fenster maximiere, auch das Bild "wächst". Kennt da jemand so spezial Dünger ;). Also wie funktioniert das? Ich habe dieses hier versucht >> ![]() |
Re: Bild skalieren
wie stellst du das bild dar?
aufgrund deiner beschreibung vermute ich mal, du hast das bitmap in einem TImage und malst wie bei der verlinkten Seite auf das Form-Canvas. Entweder du nimmst ein TImage stellst dessen Align-Eigenschaft auf alClient und Stretched auf true, oder du malst es manuell im OnPaint des Forms auf dessen Canvas und lässt das TImage weg :) HTH Frank |
Re: Bild skalieren
Hehe achso dann noch mal schauen. Ich habs in einem TImage und es ist ein Bitmap
//EDIT Yeah es funktioniert. Danke für schnelle Antwort |
Re: Bild skalieren
wie hast du das nun jetzt gemacht?
ich würde das im OnPaint des forms machen: so in etwa:
Delphi-Quellcode:
für solche Sachen (Hintergründe) nehm ich ungern TImages, aber ist Ansichtssache :)
type
TForm1... private bgbitmap:TBitmap; ... procedure TForm1.FormCreate(...); begin bgBitmap:=TBitmap.create; bgBitmap.loadFromfile(...); //oder loadFromResource etc. end; procedure TForm1.FormDestroy(...); begin bgBitmap.free; end; procedure TForm1.FormPaint(...); begin canvas.StretchDraw(rect(0,0,width,height),bgbitmap); end; Gruß Frank |
Re: Bild skalieren
Dann musst du den Code bei OnResize aber auch nochmal hinschreiben, sonst wird der Hintergrund bei Verkleinerung des Formular nicht wieder kleiner.
|
Re: Bild skalieren
Ich habe es mit Strech := True gemacht aber das ist total verpixelt. Bei dsdt.info stand mit einem Strech Al. kann man dsa ändern. Wie? Davon verstehe ich gar nichts. Könnt ihr mir nochmal helfen?
|
Re: Bild skalieren
Zitat:
Ist doch in jedem Pixel-Grafik-Programm (Paint, Photoshop) auch so (gut, es gibt ausgefeilte Anti-Aliasing-Funktionen, aber auch die sind nicht 100%ig), evtl. mal bei ![]() Zitat:
Ich weis ja nicht, was du für eine Grafik (von der Größe her) im Hintergrund haben willst, es gibts ja auch die Möglichkeit die Grafik zu kacheln (hab da irgendwo noch ein stückchen Code rumliegen, wenn Interesse besteht). ist das nicht möglich, sollte man drüber nachdenken, das resizen des Forms evtl. gleich zu verbieten ;) HTH Frank |
Re: Bild skalieren
Zitat DSDT.Info:
Zitat:
![]() |
Re: Bild skalieren
Schau dir mal das an:
![]() Vielleicht ist das was für dich. |
Re: Bild skalieren
Guten Morgen,
hatt vor kurzem auch ein ähnliches Problem und habe mir eine Funktion dafür geschrieben, vielleicht hilft sie dir.
Delphi-Quellcode:
Habe den Code zwar Kommentiert, aber stehen für Fragen immer zur Verfügung.
function ResizeImage(SourceBitMap: TBitMap; DrainWidth: Integer = 0; DrainHeight: Integer = 0;
KeepRatio: Boolean = true; PixelFormat :TPixelFormat = pfCustom):TBitMap; var Rect: TRect; SourceHeight, SourceWidth: Integer; DrainBitMap: TBitMap; begin DrainBitMap:= TBitMap.Create; SourceWidth:= SourceBitMap.Width; SourceHeight:= SourceBitMap.Height; if KeepRatio = True then begin if DrainHeight = 0 then DrainHeight:= Round((SourceHeight/SourceWidth)*DrainWidth) else if DrainWidth = 0 then DrainWidth:= Round(DrainHeight/(SourceHeight/SourceWidth)); //Sollte das Verhältniss des Ausgangsbildes anders sein als des Zielbildes //wird es so verändert, dass es in sein Ausgangsverhältnis beibehält und in //Zielbild passt. if (DrainWidth/DrainHeight) > (SourceWidth/SourceHeight) then DrainWidth:= Round((SourceWidth/SourceHeight)*DrainHeight) else if (DrainWidth/DrainHeight) < (SourceWidth/SourceHeight) then DrainHeight:= Round(DrainWidth/(SourceWidth/SourceHeight)); end; // Position des "kopier-Rechtecks" wird auf oben links // gesetzt und kopiert bis DrainWidth und DrainHeight Rect.TopLeft.X:= 0; Rect.TopLeft.Y:= 0; Rect.BottomRight.X:= DrainWidth; Rect.BottomRight.Y:= DrainHeight; // Das Result BitMap bekommt die gestretchte / gestauchte Grösse DrainBitMap.Width:= DrainWidth; DrainBitMap.Height:= DrainHeight; // Bild wird gestreckt und ins Resultbild geladen, // damit das Original nicht verändert wird. // Mit DrainBitMap wird dann weitergearbeitet DrainBitMap.Canvas.StretchDraw(Rect,SourceBitMap); // Die Farbtiefe wird geändert if PixelFormat <> pfCustom then DrainBitMap.PixelFormat:= PixelFormat; Result:= DrainBitMap; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:14 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 by Thomas Breitkreuz