Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Probleme mit StretchDraw (https://www.delphipraxis.net/151285-probleme-mit-stretchdraw.html)

SunSet 11. Mai 2010 14:10


Probleme mit StretchDraw
 
Ahoi,
ich habe eine Form angelegt in der man die Bildgröße eines Bitmaps festlegen kann. Um das Image zu verkleinern und auch die Canvas-Zeichenflaeche dachte ich mir, dass das so geht:
Delphi-Quellcode:
Image1.Canvas.StretchDraw(Rectangle(0,0,StrToInt(edBreite.Text),StrToInt(edHoehe.Text), bmp);
Der Compiler spukt mir das aus: "Incompatible types: 'Integer' and 'TBitmap'"
Ich verstehe zwar was Delphi mir damit sagen will, jedoch weiß ich einfach nicht die Lösung.
Also ich fänds nett wenn mir mal einer die StretchDraw funktion erklären könnte und mein problem löst.
Ich check da garnichts mehr :wall:

himitsu 11. Mai 2010 14:14

Re: Probleme mit StretchDraw
 
Windows.MSDN-Library durchsuchenRectangle
Delphi-Referenz durchsuchenTCanvas.Rectangle
Fällt dir was auf?

Verwende stattdessen einfach die Funktion Delphi-Referenz durchsuchenRect
und vergiß nicht, daß in deinem Code noch eine schließende Klammer fehlt. :zwinker:

SunSet 11. Mai 2010 14:25

Re: Probleme mit StretchDraw
 
Ja soweit geht das nur ich habe jetzt sozusagen 2 Images. Man sieht das Bild in normaler Größe und in klein..
Muss ich das Image löschen und dann wieder erzeugen oder wie läuft das ab?
Delphi-Quellcode:
bmp := TBitmap.Create;
bmp := Form1.imgZeichenflaeche.Picture.Bitmap;
with Form1.imgZeichenflaeche do begin
  Width := StrToInt(edBreite.Text);
  Height := StrToInt(edHoehe.Text);
  Canvas.StretchDraw(Rect(0,0,StrToInt(edBreite.Text),StrToInt(edHoehe.Text)), bmp);
end;

DeddyH 11. Mai 2010 16:24

Re: Probleme mit StretchDraw
 
Ich gehe mal anhand des Namens davon aus, dass imgZeichenflaeche ein TImage ist. Das ist wie in einem anderen Thread bereits gesagt eigentlich nicht dazu gedacht, dass man darauf "herummalt". Wieso zeichnest Du das Ursprungsbild nicht gestretched auf bmp und weist diese dann dem Image zu?

[edit] Bachstuben verwechselt :stupid: [/edit]

himitsu 11. Mai 2010 16:36

Re: Probleme mit StretchDraw
 
Delphi-Quellcode:
bmp := TBitmap.Create;
bmp := Form1.imgZeichenflaeche.Picture.Bitmap;
...
Die zweite Zeile macht bestimmt auch nicht daß, was du geplant hast und von dem Speicherleck ganz zu schweigen.
Anscheinend hast du auch kein bmp.Free verwendet, denn sonst gäbe es noch eine "schöne" Nebenwirkung. :stupid:

Wenn schon, dann
Delphi-Quellcode:
bmp.Assign(Form1.imgZeichenflaeche.Picture.Bitmap); _
aber eigentlich ist diese Zeil eh falsch/unnötig, also laß diese zweite Zeile einfach mal weg.

DeddyH 11. Mai 2010 16:39

Re: Probleme mit StretchDraw
 
Jaja, ignoriert mich einfach mal wieder *grmpf*. :evil:

[edit] Nochmal: ich persönlich würde das eher so machen
Delphi-Quellcode:
var bmp: TBitmap;
begin
  bmp := TBitmap.Create;
  try
    bmp.Width := StrToIntDef(edtBreite.Text,150);
    bmp.Height := StrToIntDef(edtHoehe.Text,150);
    bmp.Canvas.StretchDraw(Rect(0,0,bmp.Width,bmp.Height),Image.Picture.Graphic);
    Image.Picture.Assign(bmp);
  finally
    bmp.Free;
  end;
end;
[/edit]

SunSet 11. Mai 2010 17:50

Re: Probleme mit StretchDraw
 
Ja danke erstmal, wobei es immernoch nicht funktioniert. Die Größe ändert sich zwar aber das Bild ist weiß. Es geht ja darum, dass in dem Bitmap ne Grafik ist die mit verkleinert werden soll, ich dachte eigentlich das sich das Bild der Image-Komponente anpasst. Wie realisiere ich das denn?

DeddyH 11. Mai 2010 18:15

Re: Probleme mit StretchDraw
 
Wenn ich Dich richtig verstanden habe, musst Du nur die Eigenschaften Stretch und Proportional der Image-Komponente auf true stellen. Das erspart Dir das eigene Skalieren.


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:45 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