Lazarus
Home
Help
TinyPortal
Search
Login
Register
Lazarus
»
Forum
»
Programming
»
Graphics and Multimedia
»
Graphics
(Moderator:
Ask
) »
Fast pixel access
Free Pascal
Website
Downloads
Wiki
Documentation
Bugtracker
Mailing List
Lazarus
Website
Downloads (Laz+FPC)
Packages (OPM)
FAQ
Wiki
Documentation (RTL/FCL/LCL)
Bugtracker
CCR Bugs
GIT
Mailing List
Other languages
Foundation
Website
Useful Wiki Links
Project Roadmap
Getting the Source
Screenshots
How to use the forum
Forum Rules
About donations (wiki)
Bookstore
Computer Math and Games in Pascal
(preview)
Lazarus Handbook
Search
Advanced search
WIKI Timeout issues
Please read here if you have trouble connecting to the wiki
Recent
Forte Report CE Questions
by
mtrsoft
[
Today
at 07:08:19 am]
Math Book for Computer Fa...
by
Curt Carpenter
[
Today
at 04:40:16 am]
Fpcupdeluxe
by
Okoba
[
Today
at 03:56:30 am]
Debugger regression in La...
by
TheMouseAUS
[
Today
at 01:14:05 am]
Setting up an ARM embedde...
by
Ruptor
[
Today
at 12:10:31 am]
Has anyone installed TeeB...
by
wp
[July 10, 2025, 10:43:30 pm]
ChatGPT and ObjectPascal ...
by
zeljko
[July 10, 2025, 10:09:18 pm]
About Skia graphics engin...
by
DomingoGP
[July 10, 2025, 10:07:17 pm]
internal Compiler Error
by
marcov
[July 10, 2025, 09:36:12 pm]
activex.pp OleTranslateAc...
by
marcov
[July 10, 2025, 09:25:23 pm]
MOVED: Can't rebuild laza...
by
Martin_fr
[July 10, 2025, 09:01:27 pm]
LINUX: My program stops w...
by
Martin_fr
[July 10, 2025, 08:59:09 pm]
catch error 400
by
paweld
[July 10, 2025, 08:42:15 pm]
Zeromemory vs. Fillchar
by
ASerge
[July 10, 2025, 08:25:18 pm]
LazGetShortLanguageID -> ...
by
Grahame Grieve
[July 10, 2025, 08:15:00 pm]
Can't rebuild lazarus
by
JuhaManninen
[July 10, 2025, 08:13:45 pm]
MDI ChildForm
by
astar
[July 10, 2025, 06:03:20 pm]
Questions about GUID decl...
by
Thaddy
[July 10, 2025, 05:07:49 pm]
Pascal Conference 2025
by
Kralle
[July 10, 2025, 05:00:59 pm]
TBufDataset with Invalid ...
by
talisjonatas
[July 10, 2025, 04:53:42 pm]
activex.pp definition pro...
by
Thaddy
[July 10, 2025, 01:03:29 pm]
Synapse and ShareMem ...n...
by
Thaddy
[July 10, 2025, 01:02:40 pm]
Create a png image from a...
by
paweld
[July 10, 2025, 12:57:35 pm]
controls.lpr(731,15) Erro...
by
Bandy
[July 10, 2025, 12:55:34 pm]
Input Chinese using Micro...
by
momigo
[July 10, 2025, 09:25:32 am]
« previous
next »
Print
Pages: [
1
]
Author
Topic: Fast pixel access (Read 2291 times)
user5
Sr. Member
Posts: 414
Fast pixel access
«
on:
November 28, 2019, 02:00:15 pm »
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]
[+]
[-]
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
;
Logged
user5
Sr. Member
Posts: 414
Re: Fast pixel access
«
Reply #1 on:
November 28, 2019, 02:04:31 pm »
Oops. Line 5 should have been: newcolor := mybitmap.canvas.pixels[x + 1,y]; //to access the pixel next to x
Logged
winni
Hero Member
Posts: 3197
Re: Fast pixel access
«
Reply #2 on:
November 28, 2019, 03:44:11 pm »
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
Logged
user5
Sr. Member
Posts: 414
Re: Fast pixel access
«
Reply #3 on:
November 28, 2019, 07:31:32 pm »
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]
[+]
[-]
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
;
Logged
wp
Hero Member
Posts: 12909
Re: Fast pixel access
«
Reply #4 on:
November 28, 2019, 07:40:32 pm »
Just missing the "uses":
Code: Pascal
[Select]
[+]
[-]
uses
fpImage
,
// colGreen, TFPColor
IntfGraphics
;
// TLazIntfImage
Logged
user5
Sr. Member
Posts: 414
Re: Fast pixel access
«
Reply #5 on:
November 28, 2019, 07:48:58 pm »
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.
Logged
user5
Sr. Member
Posts: 414
Re: Fast pixel access
«
Reply #6 on:
November 28, 2019, 07:52:33 pm »
Does the TFPColor "colRed" equal "clRed" or do I need a conversion of some kind?
Logged
user5
Sr. Member
Posts: 414
Re: Fast pixel access
«
Reply #7 on:
November 28, 2019, 08:08:13 pm »
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.
Logged
Soner
Sr. Member
Posts: 319
Re: Fast pixel access
«
Reply #8 on:
November 28, 2019, 08:52:23 pm »
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.
Logged
Print
Pages: [
1
]
« previous
next »
Lazarus
»
Forum
»
Programming
»
Graphics and Multimedia
»
Graphics
(Moderator:
Ask
) »
Fast pixel access
TinyPortal
© 2005-2018