Witam,
Czy można jakoś szybkim sposobem zrobić negatyw z "rysowanego" tekstu? Jakoś nie moge nic wygooglować. Znalazłem w gotowcach procedure która robi negatyw z bitmapy, pomyślałem że jak najpierw narysuje na niej tekst, potem zrobie negatyw a na końcu wrzuce na właściwego canvasa to otrzymam to co potrzebuje, udało się w 90%, nie mogę się pozbyć tła pod tym tekstem, jak dam Brush.Style := bsclear to cała bitmapa jest czarna, to kod:
procedure Negatyw(var Bitmap: TBitmap);
var
H,V:Integer;
WskByte:^Byte; //Wskaźnik do Bajta (nie trzeba do całego pixela bo i tak wszystko odwracamy)
begin
Bitmap.PixelFormat:=pf24bit;
for V:=0 to Bitmap.Height-1 do
begin
WskByte:=Bitmap.ScanLine[V]; // V jest to pozycja danej linii bitmapy (od góry )
for H:=0 to (Bitmap.Width *3)-1 do
begin
WskByte^:= not WskByte^ ;// (odwracamy wartość na którą pokazuje wskaźnik)
inc(WskByte);//Przesuwam wskaźnik
end;
end;
end;
procedure TestNegatyw;
var
aBMP: TBitmap;
begin
aBMP := TBitmap.Create;
try
Canvas.Brush.Style := bsClear;
// jak poniższe odkomentowane to cała BMP jest czarna - nie widać tekstu
//aBMP.Canvas.Brush.Style := bsClear;
aBMP.Width := 20;
aBMP.Height := 20;
aBMP.Canvas.TextOut(0,0,'test');
Negatyw(aBMP);
Canvas.Draw(0,0,aBMP);
finally
aBMP.Free;
end;
end;