[Solved] fast code to lower an image brightness lazarus / 39-Graphics ---------------------------------------------------------------------- the_magik_mushroom · 2023-03-12 15:13 hey guys, I'm trying to port this code from delphi to lazarus but it's not working : Code: Pascal  [Select][+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i function IntToByte(i:Integer):Byte;begin  if      i>255 then Result:=255  else if i<0   then Result:=0  else               Result:=i;end; procedure Darkness(var src: TBitmap; Amount: integer);var  p0: PByte;  r, g, b, x, y: Integer;begin  src.PixelFormat := pf24bit;  for y := 0 to src.Height - 1 do  begin    p0 := src.ScanLine[y];    for x := 0 to src.Width - 1 do    begin      r := p0[x * 3];      g := p0[x * 3 + 1];      b := p0[x * 3 + 2];      p0[x * 3] := IntToByte(r - ((r * Amount) div 255));      p0[x * 3 + 1] := IntToByte(g - ((g * Amount) div 255));      p0[x * 3 + 2] := IntToByte(b - ((b * Amount) div 255));    end;  end;end; what I want is to reduce the brightness of of bitmap, the code must be fast. nothing happen when I try to use it on a TBitmap: Darkness(bmp,75); any idea why? thanks ---------------------------------------------------------------------- Blaazen · 2023-03-12 16:22 Hi, I tested your code and it writes me: Warning: Symbol "Scanline" is not portable So I jumped to source (Graphics.pp) via Alt+ArrowUp and there is a comment by the Scanline property: // Use only when wrpped by a begin/endupdate So I added it to your code: Code: Pascal  [Select][+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i   src.BeginUpdate(False);  //all the code of the Darkness  src.EndUpdate(True);and it works. When it comes to speed, this kind of graphics will always be rather slow. Anyway div is a slow operation, you can try bitshift instead (but you will have not fine control). You can also ommit conversion IntToByte, because it will never go over 255 and beyond 0. Code: Pascal  [Select][+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i p0[x * 3] := (r - (r shr 3)); ---------------------------------------------------------------------- balazsszekely · 2023-03-12 16:47 If speed is an issue, you can always switch to BGRABitmap: 1. Install BGRABitamp from OPM 2. Download/build/run attached project ---------------------------------------------------------------------- Jorg3000 · 2023-03-12 19:02 Not testet! Avoid all the x*3 Replace div 255 by shr 8 (= div 256) Code: Pascal  [Select][+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i r := p0^;  // p0[0]g := p0[1];b := p0[2];p0^ := r - ((r * Amount) shr 8);p0[1] := g - ((g * Amount) shr 8);p0[2] := b - ((b * Amount) shr 8);inc(p0,3);  // next 3 bytes ---------------------------------------------------------------------- the_magik_mushroom · 2023-03-12 19:09 thanks for all the answer