Toon posts:

[delphi] inhoud image verplaatsen

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hoi,

Ik heb hier wat problemen met het verplaatsen van de inhoud binnen een image.

Als ik CopyRect gebruik, krijg ik het niet goed voor elkaar (dan krijg ik te veel).

Het plaatje dat ik wil verplaatsen zit rechtsonder in de image, en moet naar linksboven (zodat ik de bmp zo klein mogelijk kan opslaan)

  • OZ-Gump
  • Registratie: November 2002
  • Laatst online: 26-06 10:37

OZ-Gump

terug van weggeweest

Je krijgt teveel... Krijg je de hele image, krijg je een randje van 1 pixel teveel, welke code gebruik je, krijg je eventueel meldingen, wat heb je zelf geprobeerd?

Dit zijn een aantal vragen die het erg zouden vergemakkelijken om dit probleem op te lossen. Zoals je post nu staat is het moeilijk er iets zinnigs over te zeggen. Ik denk dat je CopyRect verkeerd gebruikt, of verkeerd interpreteert

Edit:
Dit heeft zeker te maken met het feit dat je screenshotje gemaakt wordt terwijl je app rechtsonder staat...?

[ Voor 15% gewijzigd door OZ-Gump op 24-10-2003 10:17 ]

My personal website


Verwijderd

Topicstarter
Dit is de code die ik wilde gebruiken om het plaatje maar voor de helft te kopieeren
code:
1
2
3
4
5
6
7
  R := Rect(100,100,400,400);
  With Form2.Image do
    BEGIN
      Width := R.Right;
      Height := R.Bottom;
      Canvas.CopyRect(R,Image1.Canvas,R);
    END;


Het maakt op dit moment nix uit hoe ik de waardes van "R" aanpas.
Dit heeft trouwens nix met die andere topic te maken; moet wel bekennen dat ik de link even kwijt was :X

[ Voor 46% gewijzigd door Verwijderd op 24-10-2003 10:30 ]


  • OZ-Gump
  • Registratie: November 2002
  • Laatst online: 26-06 10:37

OZ-Gump

terug van weggeweest

Dat zou natuurlijk wel eens kunnen komen omdat je de breedte van de image op right van R zet. De Right van R is nog steeds left + width. En dus groter dan die 400...? (in het voorbeeld 500 :p)

Volgens mij maak je daar ergens de denkfout...

Daarbij kopieer je nu van R naar R...? Ik denk dat je niet alles even goed aanroept. Kijk ook naar het voorbeeld dat in de delphi help staat:
Declaration
procedure CopyRect(const Dest: TRect; Canvas: TCanvas; const Source: TRect);

Description
This method copies part of an image defined by the rectangle Source from another canvas to the area on the printer canvas defined by the rectangle Dest.
Delphi:
1
2
3
4
5
6
7
8
9
10
11
12
13
var
  Bitmap: TBitmap;
  MyRect, MyOther: TRect;
begin

  MyRect := Rect(10,10,100,100);

  MyOther := Rect(10,111,100, 201);
  Bitmap := TBitmap.Create;
  Bitmap.LoadFromFile('c:\windows\tartan.bmp');
  Form1.Canvas.CopyRect(MyOther,Bitmap.Canvas,MyRect);
  Bitmap.Free;
end;

My personal website


Verwijderd

Topicstarter
Als ik de "top" van deze rect verhoog, dan word het plaatje niet kleiner, maar juist groter (er komt een grotere rand aan de bovenkant.
dit zelfde gebeurd met de "left".

right en bottom werken wel goed :?

Verwijderd

Topicstarter
ok, ik snap al wat ik fout doe, bedankt (alweer) 8)7

Verwijderd

Zoals OZ-Gump ook al zegt, kijk eens in de declaratie. Je moet als je delen wilt copieren twee verschillende rect's gebruikten, eentje voor de destination die dus zoiets wordt als rect(0,0,W,H) en een source die iets wordt als rect(startX,StartY,StartX+W,startY+H)

Verwijderd

Topicstarter
het werkt inderdaad een stuk beter zo....
Pagina: 1