1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
| function TForm1.Combine(aTextBmp, aFondBmp: TBitmap): TBitmap;
const Seuil = 130; //<- Seuil de filtrage salissures vitre scanner/Texte
var
CT :PRGBTripleArray; //Couleur pixel Texte
CF :PRGBTripleArray; //Couleur pixel Fond
x, y :integer;
MaxX, MaxY :integer;
RT,GT,BT : byte; //Composantes pixel Texte
begin
//Force les images en 24 bits
aTextBmp.PixelFormat := pf24bit;
aFondBmp.PixelFormat := pf24bit;
//Crée l'image résultante
Result := TBitmap.Create;
//Assigne l'image de fond à l'image résultante
Result.Assign(aFondBmp);
//Boucle maximum sur les plus petites Largeur/Hauteur
MaxX := Min(aTextBmp.Width, aFondBmp.Width) -1;
MaxY := Min(aTextBmp.Height, aFondBmp.Height) -1;
for y := 0 to MaxY do
begin
CT := aTextBmp.ScanLine[y];
CF := Result.ScanLine[y];
for x := 0 to MaxX do
begin
//On considère comme blanc le fond du texte s'il est gris compris entre RGB(Seuil,Seuil,Seuil) et RGB(255,255,255)
//donc si RT ou GT ou BT < Seuil on considère que c'est du texte sinon on laisse passer le logo
RT:=CT[x].rgbtRed; GT:=CT[x].rgbtGreen; BT:=CT[x].rgbtBlue;
if (RT<Seuil) or (GT<Seuil) or (BT<Seuil) then
begin
CF[x].rgbtRed := RT;
CF[x].rgbtGreen := GT;
CF[x].rgbtBlue := BT;
end;
end;
end;
end; |
Partager