02-15-2008, 9:47
|
bdipso
Joined on 01-28-2008
Posts 3
|
|
|
For anybody who wants such a function in Delphi. I used L_RemapBitmapHue() function to convert any pixel that has a less light value than 170 to pure black. Than removed any color but black in the following code :
procedure TMainForm.Button11Click(Sender: TObject);
var
i : integer;
uMaskTable : array [0..255] of L_UINT;
uValTable : array [0..255] of L_UINT;
uLUTLen : L_INT;
nRet : L_INT;
rgbLower : COLORREF;
rgbHigher : COLORREF;
crRgnColor : COLORREF;
fSmooth : SMOOTH;
fDotRemove : DOTREMOVE;
br : BORDERREMOVE;
begin
uLUTLen := 256;
for i:=0 to uLUTLen-1 do
begin
uMaskTable[i] := 1;
if i>170 then
uValTable[i]:=i
else
uValTable[i]:=0;
end;
nRet := L_RemapBitmapHue(@Bitmap1, @uMaskTable, nil, nil, @uValTable, uLUTLen);
if nRet=SUCCESS then begin
rgbLower := RGB(0,0,0);
rgbHigher := RGB(0,0,0);
nRet := L_SetBitmapRgnColorRGBRange(@Bitmap1,rgbLower,rgbHigher,L_RGN_SETNOT);
if (nRet=SUCCESS) then begin
if (L_BitmapHasRgn(@Bitmap1)) then begin
crRgnColor := RGB(255,255,255);
nRet := L_FillBitmap(@Bitmap1, crRgnColor);
if (nRet=SUCCESS) then begin
nRet := L_ColorResBitmap(@Bitmap1, @Bitmap1, sizeof(BITMAPHANDLE)
, 1
, CRF_NODITHERING or CRF_FIXEDPALETTE or CRF_BYTEORDERBGR
, nil, 0, 0, nil, nil);
if nret=Success then begin
HandlePalette ( false );
invalidate;
end;
end;
L_FreeBitmapRgn(@Bitmap1);
end;
end;
end;
end;
|
|
|
|
|
Report
|
|
|
|