Ik ben nu in C# bezig met een programma die van een foto een bepaalde kleur-range eruit kan filteren.
Ik heb het al wel werkend, maar het is gruwelijk traag.
Ik loop nu de hele image pixel voor pixel door (twee loops, 1 voor x en een voor y).
Ik heb dit ook ooit in Delphi gemaakt en daar kwam toen iemand met de opmerking om steeds de hele rij pixels in te lezen en dan te doorlopen:
Dit was echt heel veel sneller.
Maar hoe doe ik zoiets in C# ?
Ik kan er niks over vinden.
Bitmap.MakeTransparent() werkt overigens niet omdat die maar 1 kleur eruit filters en niet een kleur-range.
Of heeft iemand nog een betere manier om zoiets te doen ?
En hoe kan ik het beste kleuren vergelijken ?
De RGB-waarden steeds vergelijken werkt niet helemaal goed omdat in bepaalde gevallen R wel hoger is, maar G bijv. minder.
Ik heb het al wel werkend, maar het is gruwelijk traag.
Ik loop nu de hele image pixel voor pixel door (twee loops, 1 voor x en een voor y).
Ik heb dit ook ooit in Delphi gemaakt en daar kwam toen iemand met de opmerking om steeds de hele rij pixels in te lezen en dan te doorlopen:
code:
1
2
3
4
5
6
7
8
9
10
11
12
| for i := 0 to Bmp.Height - 1 do
begin
Line := PByteArray(Bmp.ScanLine[i]);
for j := 0 to Bmp.Width - 1 do
begin
k := j * 3;
b1 := Line[k];
g1 := Line[k+1];
r1 := Line[k+2];
(hier dan de kleuren eventueel wijzigen)
end;
end; |
Dit was echt heel veel sneller.
Maar hoe doe ik zoiets in C# ?
Ik kan er niks over vinden.
Bitmap.MakeTransparent() werkt overigens niet omdat die maar 1 kleur eruit filters en niet een kleur-range.
Of heeft iemand nog een betere manier om zoiets te doen ?
En hoe kan ik het beste kleuren vergelijken ?
De RGB-waarden steeds vergelijken werkt niet helemaal goed omdat in bepaalde gevallen R wel hoger is, maar G bijv. minder.