Aaalso..
zunächst mal, ohne dich enttäuschen zu wollen, die gute nachricht : Das gibs schon lange.
Auf amerikanischen und englischen Flughäfen laufen diese Dinger schon seit geraumer Zeit.
Die schlechte Nachricht: an den benötigten Algorithmen haben ganze Entwicklerteams gearbeitet,
deren IQ man nur noch 3 Stellig messen kann. Abgesehen davon das es völliger Unsinn ist eine
bestehende Software nochmal zu schreiben, solltest du als Coder wissen, würde es vermutlich
deine und meine Lebensspanne überschreiten wenn du das nachbauen willst.
Nur mal so...in welcher Sprache codest du denn?
Ich zeig dir mal einen Sippet aus meinem letzten Projekt:
Das Ding macht NUR einen simplen Resize und stellt nur einen kleinen Teil der gesamten Routine dar.
Kannst du dir vorstellen wie das aussieht wenn nach dem Scann nach Mustern gesucht werden soll?
cheers
mac
procedure TMacImage.Resize(Src, Dst: TBitmap);
var
x, y: Integer;
xP, yP: Integer;
xP2, yP2: Integer;
SrcLine1, SrcLine2: pRGBArray;
t3: Integer;
z, z2, iz2: Integer;
DstLine: pRGBArray;
DstGap: Integer;
w1, w2, w3, w4: Integer;
begin
Src.PixelFormat := pf24Bit;
Dst.PixelFormat := pf24Bit;
// Both Images identical?
if (Src.Width = Dst.Width) and (Src.Height = Dst.Height) then
Dst.Assign(Src) // yes, just copy
else
begin // NO - start calculating /scann & penn) =)
DstLine := Dst.ScanLine[0];
DstGap := Integer(Dst.ScanLine[1]) - Integer(DstLine);
xP2 := MulDiv(pred(Src.Width), $10000, Dst.Width);
yP2 := MulDiv(pred(Src.Height), $10000, Dst.Height);
yP := 0;
for y := 0 to pred(Dst.Height) do
begin
xP := 0;
SrcLine1 := Src.ScanLine[yP shr 16];
if (yP shr 16 < pred(Src.Height)) then
SrcLine2 := Src.ScanLine[succ(yP shr 16)]
else
SrcLine2 := Src.ScanLine[yP shr 16];
z2 := succ(yP and $FFFF);
iz2 := succ((not yp) and $FFFF);
for x := 0 to pred(Dst.Width) do
begin
t3 := xP shr 16;
z := xP and $FFFF;
w2 := MulDiv(z, iz2, $10000);
w1 := iz2 - w2;
w4 := MulDiv(z, z2, $10000);
w3 := z2 - w4;
DstLine
- .rgbtRed := (SrcLine1[t3].rgbtRed * w1 +
SrcLine1[t3 + 1].rgbtRed * w2 +
SrcLine2[t3].rgbtRed * w3 + SrcLine2[t3 + 1].rgbtRed * w4) shr 16;
DstLine
(SrcLine1[t3].rgbtGreen * w1 + SrcLine1[t3 + 1].rgbtGreen * w2 +
SrcLine2[t3].rgbtGreen * w3 + SrcLine2[t3 + 1].rgbtGreen * w4) shr 16;
DstLine
- .rgbtBlue := (SrcLine1[t3].rgbtBlue * w1 +
SrcLine1[t3 + 1].rgbtBlue * w2 +
SrcLine2[t3].rgbtBlue * w3 +
SrcLine2[t3 + 1].rgbtBlue * w4) shr 16;
Inc(xP, xP2);
end; {for}
Inc(yP, yP2);
DstLine := pRGBArray(Integer(DstLine) + DstGap);
end; {for}
end; {if}
// ------------- Call SAFE to Files here ---------------
end;