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
IRC channel
GIT
Mailing List
Other languages
Foundation
Website
Useful Wiki Links
Project Roadmap
Getting the Source
Screenshots
How to use the forum
About donations (wiki)
Bookstore
Computer Math and Games in Pascal
(preview)
Lazarus Handbook
Search
Advanced search
Recent
open dialog - default dir...
by
Nicole
[
Today
at 08:02:40 pm]
System.Now gives timestam...
by
Thaddy
[
Today
at 07:59:53 pm]
Installing and using Vamp...
by
Odacir
[
Today
at 07:58:22 pm]
Multidimensional arrays a...
by
Kays
[
Today
at 07:36:57 pm]
Demo Scene Picture sinwav...
by
circular
[
Today
at 07:27:02 pm]
Demo Scene Bitmap Font Sc...
by
KodeZwerg
[
Today
at 07:21:14 pm]
what's difference between...
by
ASerge
[
Today
at 07:09:52 pm]
splitting an image
by
KodeZwerg
[
Today
at 07:07:21 pm]
Debugger error
by
bobonwhidbey
[
Today
at 07:03:07 pm]
How to: create DLL file f...
by
paule32
[
Today
at 07:02:31 pm]
Your best UI design - con...
by
circular
[
Today
at 06:48:12 pm]
Web Applications with Pas...
by
1HuntnMan
[
Today
at 06:44:00 pm]
Converting a string/index...
by
1HuntnMan
[
Today
at 06:35:19 pm]
Drawing grid lines on a t...
by
KodeZwerg
[
Today
at 05:42:19 pm]
Compile/Convert Delphi pr...
by
Martin_fr
[
Today
at 05:29:03 pm]
Lazarus features in a non...
by
Lutz Mändle
[
Today
at 05:26:34 pm]
Lazarus for Windows on aa...
by
msintle
[
Today
at 05:03:57 pm]
AI, NLP and CAI: Text Gen...
by
indydev
[
Today
at 04:51:00 pm]
Parameter passing odditie...
by
KodeZwerg
[
Today
at 03:41:49 pm]
Surf Units in Text Mode I...
by
mosquito
[
Today
at 01:58:21 pm]
Ho Ho Ho IntraWeb in Laza...
by
Thaddy
[
Today
at 01:55:52 pm]
Generics - correct syntax
by
Thaddy
[
Today
at 01:48:32 pm]
FpDebug questions
by
440bx
[
Today
at 01:22:53 pm]
leetcode doesn’t support ...
by
codeninja
[
Today
at 01:16:43 pm]
Can function be used for ...
by
Joanna
[
Today
at 12:48:19 pm]
« previous
next »
Print
Pages: [
1
]
Author
Topic: Fast pixel access (Read 1741 times)
user5
Sr. Member
Posts: 357
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: 357
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: 357
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: 11923
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: 357
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: 357
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: 357
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: 305
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