AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Bild skalieren

Ein Thema von napsterxx · begonnen am 22. Jul 2007 · letzter Beitrag vom 23. Jul 2007
Antwort Antwort
Seite 1 von 2  1 2      
napsterxx

Registriert seit: 18. Mär 2007
Ort: Borland
556 Beiträge
 
Delphi 7 Enterprise
 
#1

Bild skalieren

  Alt 22. Jul 2007, 21:25
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 >>Klick Mich<< aber das funktioniert nur eingeschränkt. Das Bild wird zwar größer, jedoch wird es ganz komisch hinter das eigentliche Bild gelegt, sodass am Ende im Vordergrund das 50 mal 50 Bild ist, und im Hintergrund das 200 zu 200 z.B.. Tja wie funktioniert das nun?
Du derefernzierst p2 einmal und weißt die Adresse von i zu. Das heißt p2 (also der Zeiger auf einen Zeiger) zeigt auf den Zeiger p1 welchen du so auf i zeigen lässt.
  Mit Zitat antworten Zitat
Benutzerbild von _frank_
_frank_

Registriert seit: 21. Feb 2003
Ort: Plauen / Bamberg
922 Beiträge
 
Delphi 3 Professional
 
#2

Re: Bild skalieren

  Alt 22. Jul 2007, 21:29
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
  Mit Zitat antworten Zitat
napsterxx

Registriert seit: 18. Mär 2007
Ort: Borland
556 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: Bild skalieren

  Alt 22. Jul 2007, 21:33
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
Du derefernzierst p2 einmal und weißt die Adresse von i zu. Das heißt p2 (also der Zeiger auf einen Zeiger) zeigt auf den Zeiger p1 welchen du so auf i zeigen lässt.
  Mit Zitat antworten Zitat
Benutzerbild von _frank_
_frank_

Registriert seit: 21. Feb 2003
Ort: Plauen / Bamberg
922 Beiträge
 
Delphi 3 Professional
 
#4

Re: Bild skalieren

  Alt 22. Jul 2007, 21:45
wie hast du das nun jetzt gemacht?

ich würde das im OnPaint des forms machen:

so in etwa:

Delphi-Quellcode:
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;
für solche Sachen (Hintergründe) nehm ich ungern TImages, aber ist Ansichtssache

Gruß Frank
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#5

Re: Bild skalieren

  Alt 22. Jul 2007, 21:52
Dann musst du den Code bei OnResize aber auch nochmal hinschreiben, sonst wird der Hintergrund bei Verkleinerung des Formular nicht wieder kleiner.
  Mit Zitat antworten Zitat
napsterxx

Registriert seit: 18. Mär 2007
Ort: Borland
556 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: Bild skalieren

  Alt 22. Jul 2007, 21:53
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?
Du derefernzierst p2 einmal und weißt die Adresse von i zu. Das heißt p2 (also der Zeiger auf einen Zeiger) zeigt auf den Zeiger p1 welchen du so auf i zeigen lässt.
  Mit Zitat antworten Zitat
Benutzerbild von _frank_
_frank_

Registriert seit: 21. Feb 2003
Ort: Plauen / Bamberg
922 Beiträge
 
Delphi 3 Professional
 
#7

Re: Bild skalieren

  Alt 23. Jul 2007, 01:41
Zitat von napsterxx:
Ich habe es mit Strech := True gemacht aber das ist total verpixelt.
ist doch klar, dass es pixelt...es ist eine pixelgrafik. Wenn man die über ihre ursprüngliche Größe streckt, müssen ja zusätzliche pixel rein und die passen nunmal nicht 100%ig
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 http://www.efg2.com/Lab schauen.
Zitat von napsterxx:
Bei dsdt.info stand mit einem Strech Al. kann man dsa ändern. Wie? Davon verstehe ich gar nichts. Könnt ihr mir nochmal helfen?
ein Strech-Was? Sagt mir so erstmal nichts...evtl. kannst du uns nen Link geben, damit wir wissen, was du meinst.
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
  Mit Zitat antworten Zitat
napsterxx

Registriert seit: 18. Mär 2007
Ort: Borland
556 Beiträge
 
Delphi 7 Enterprise
 
#8

Re: Bild skalieren

  Alt 23. Jul 2007, 06:24
Zitat DSDT.Info:
Zitat:
Wird ein Bild stark vergrößert, verschlechtert sich die Bildqualität. Um diesen Effekt zu vermeiden, können Sie optimierte Stretch-Algorithmen verwenden.
Zu finden ist dies hier.
Du derefernzierst p2 einmal und weißt die Adresse von i zu. Das heißt p2 (also der Zeiger auf einen Zeiger) zeigt auf den Zeiger p1 welchen du so auf i zeigen lässt.
  Mit Zitat antworten Zitat
Nuclear-Ping
(Gast)

n/a Beiträge
 
#9

Re: Bild skalieren

  Alt 23. Jul 2007, 06:47
Schau dir mal das an:
http://spotlight.de/zforen/dlp/m/dlp...1475-6567.html

Vielleicht ist das was für dich.
  Mit Zitat antworten Zitat
b1zZ

Registriert seit: 8. Aug 2005
Ort: Wischhafen
52 Beiträge
 
Delphi 2009 Enterprise
 
#10

Re: Bild skalieren

  Alt 23. Jul 2007, 07:16
Guten Morgen,

hatt vor kurzem auch ein ähnliches Problem und habe mir eine Funktion dafür geschrieben, vielleicht hilft sie dir.

Delphi-Quellcode:
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;
Habe den Code zwar Kommentiert, aber stehen für Fragen immer zur Verfügung.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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