Fast pixel access lazarus / 39-Graphics ---------------------------------------------------------------------- user5 · 2019-11-28 13:00 In the code below lines 1 and 2 together do the same thing as line 3 except of course line 3 would be much slower if I used it in the code instead of lines 1 and 2. Line 1 uses a raw image fast pixel access method that is similar to BGRABitmap.     Line 5 accesses pixels next to x and y and I was wondering if anyone knows how I could use the fast pixel method to accomplish the same thing but at a faster speed.     Thanks and happy Thanksgiving morning!     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 for y := starty to (mybitmap.height - 1) do  begin   PixelPtr := PixelRowPtr;   for x := startx to (mybitmap.width - 1) do    begin     tempcolor := PixelPtr^; //line 1     tempcolor := SwapRedBlue(tempcolor); //line 2      tempcolor := mybitmap.canvas.pixels[x,y]; //line 3      newcolor := mybitmap.canvas.pixels[x + 1,y + 1]; //line 5    end;  end; ---------------------------------------------------------------------- user5 · 2019-11-28 13:04 Oops. Line 5 should have been: newcolor := mybitmap.canvas.pixels[x + 1,y]; //to access the pixel next to x ---------------------------------------------------------------------- winni · 2019-11-28 14:44 Hi! There is a page about fast direct pixel access in Lazarus with a lot of examples: https://wiki.freepascal.org/Fast_direct_pixel_access No thanksgiving here tomorrow - just another Friday for Future. Winni ---------------------------------------------------------------------- user5 · 2019-11-28 18:31 I checked out the page you mentioned and it led me to some other sites but it seems like not enough information is provided. For example, I found the following code but I can't get it to work. "colGreen" from what I understand is supposed to be a TFPColor but the compiler wouldn't let me define something like var newcolor:TFPColor. I put in all the correct headers.   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 procedure TForm1.Button4Click(Sender: TObject);var  b: TBitmap;  t: TLazIntfImage;begin  b := TBitmap.Create;  try    b.LoadFromFile('test.bmp');    t := b.CreateIntfImage;     // Read and/or write to the pixels    t.Colors[10,20] := colGreen; //This won't compile.     b.LoadFromIntfImage(t);  finally    t.Free;    b.Free;  end;end; ---------------------------------------------------------------------- wp · 2019-11-28 18:40 Just missing the "uses": 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 uses  fpImage,        // colGreen, TFPColor  IntfGraphics;   // TLazIntfImage ---------------------------------------------------------------------- user5 · 2019-11-28 18:48 You are absolutely correct. I was missing FPImage in the "uses" clause. It's working now. The old slow pixel method took 7 seconds to fill a 1053x655 image with the color red but the TLazIntfImage method did it almost instantaneously. Wow! I wonder if there's anything even faster. Thanks a lot. ---------------------------------------------------------------------- user5 · 2019-11-28 18:52 Does the TFPColor "colRed" equal "clRed" or do I need a conversion of some kind? ---------------------------------------------------------------------- user5 · 2019-11-28 19:08 Okay... I found the conversion function which converts a TColor to a TFPColor so that: newcolor := TColorToFPColor(tempcolor); newcolor is a TFPColor and tempcolor is a TColor. I also found the function which converts a TFPColor to a TColor. Thanks again for taking the time to help me. I really appreciate it. This seems to be what I need. ---------------------------------------------------------------------- Soner · 2019-11-28 19:52 Don't forget, TBitmap has Scanline property now. As someone the wikipage wrote, then tbitmap has not this property. NOw, you can manipulate Tbitmap without TLazIntfImage faster.