Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Wie arbeitet StretchBlt genau ? (https://www.delphipraxis.net/148459-wie-arbeitet-stretchblt-genau.html)

Amateurprofi 2. Mär 2010 10:04


Wie arbeitet StretchBlt genau ?
 
Ich habe 2 Bitmaps, b1 und b2 und es gilt
b1.width = b1.height
b2.width = b2.height
b2.width >= b1.width
also beide quadratisch und b2>=b1.
Nun mache ich
Delphi-Quellcode:
w1:=b1.width;
w2:=b2.width;
StretchBlt(b2.Canvas.Handle,0,0,w2,w2,b1.Canvas.Handle,0,0,w1,w1,srccopy);
Ich suche nach einer Möglichkeit, von der Position eines beliebigen Pixel in b2 die korrespondierende Position in b1 zu ermitteln.
Das ist einfach, wenn b2 genau n mal so groß ist, wie b1, denn dann werden alle Pixel aus b1 n Mal in b2 abgebildet.
Wenn aber nicht so klare Verhältnisse herrschen, zum Beispiel w1=137 und w2=215, dann ist StretchBlts Arbeitsweise für mich nicht eindeutig klar.
Ich erziele schon ganz gute Ergebnisse mit
Delphi-Quellcode:
x1:=Round(x2*(w1-1)/(w2-1))
aber von fehlerfrei bin ich weit entfernt.

jfheins 2. Mär 2010 10:26

Re: Wie arbeitet StretchBlt genau ?
 
Ich vermute mal, StretchBlt verwendet Nearest-neighbor interpolation oder Bilineare interpolation.
Bei Nearest-neighbor kannst du direkt zurückschließen, welcher pixel des ausgangsbildes zu dem pixel des Zielbilds gehört - aber das Ergebnis sieht pixelig und unschön aus.
Bei bilinearer (oder gar bikubischer) Interpolation geht das nicht so einfach - hier wird ein Pixel des Zielbilds ja aus vier Pixeln des Orginalbilds errechnet.


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