Proportionellt ändra storlek på en bild som skapar miniatyrgrafik

I grafik "programmering" a Miniatyr är en version med reducerad storlek på en bild.

Här är en idé för din nästa applikation: skapa en "formulärväljare" så att användare enkelt kan välja och navigera genom öppna formulär genom att visa miniatyrbilder av dem alla i ett dialogfönster.

Intressant idé? Låter som funktionen "Quick Tabs" i webbläsaren IE 7 :)

Innan du skapar en så snygg funktion för din nästa Delphi-applikation, måste du veta hur du tar tag i bilden på formuläret ("form-screen shot") och hur du ändrar storleken på den till önskad miniatyrbild.

Proportional bildstorleksändring: Skapa miniatyrgrafik

Nedan hittar du ett kodblock för att ta bilden av ett formulär (Form1) med hjälp av GetFormImage metod. Den resulterande TBitmapen ändras sedan för att passa den maximala miniatyrbredden (200 pixlar) och / eller höjden (150 pixlar).
Storleksändring bibehåller bildförhållandet.

Den resulterande bilden visas sedan i en TImage-kontroll, med namnet "Image1".

 const   maxbredd = 200; maxHöjd = 150; var   miniatyrbild: TBitmap; thumbRect: TRect; Börja   miniatyrbild: = Form1.GetFormImage;   Prova     thumbRect.Left: = 0; thumbRect.Top: = 0;     // proportionell storlek     om miniatyrbild. Bredd> miniatyrbild. Höjd sedan     Börja       thumbRect.Right: = maxWidth; thumbRect.Bottom: = (maxWidth * thumbnail.Height) div thumbnail.Width;     slut annat börjar       thumbRect.Bottom: = maxHeight; thumbRect.Right: = (maxHeight * thumbnail.Width) div thumbnail.Height;     slutet; miniatyrbild. Canvas.StretchDraw (thumbRect, thumbnail); // ändra storlek på bild     miniatyrbild. Bredd: = thumbRect.Right; thumbnail.Hight: = thumbRect.Bottom;     // display i en TImage-kontroll     Image1.Picture.Assign (miniatyrbild);   till sist     thumbnail.Free;   slutet; slutet; 

Notera GetFormImage kopierar bara formulärklientområdet - om du behöver ta hela "skärmdump" av ett formulär (inklusive gränsen) behöver du en annan strategi ... mer om det nästa gång.