请问TBitmap类的 ScanLine方法有什么作用?

xsf2516624 2010-02-02 12:11:00

如题,希望能给个例子.先谢谢了~~~~~~~~~
...全文
791 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
jdngz 2010-03-15
  • 打赏
  • 举报
回复
procedure TForm1.Button1Click(Sender: TObject);

// This example shows drawing directly to the BitMap
var
x,y : Integer;
BitMap : TBitMap;
P : PByteArray;
begin
BitMap := TBitMap.create;
try
// On Windows replace MyBitmap.png with a full pathname such as
// C:\Program Files\Common Files\Borland Shared\Images\Splash\256color\factory.bmp
BitMap.LoadFromFile('MyBitmap.png');
for y := 0 to BitMap.Height -1 do
begin
P := BitMap.ScanLine[y];

for x := 0 to BitMap.Width -1 do
P[x] := y;
end;
Canvas.Draw(0,0,BitMap);
finally
BitMap.Free;
end;
end;


Delphi 自带的例子
dj2437 2010-03-06
  • 打赏
  • 举报
回复
ScanLines比Canvas.Pixels[x,y]快得多的多的多的多的多的多的多的多!
我估计要相差2个数量级,至少一个数量级。
哈哈楼上的同学说的是在忆知的情况下吧
如果按已知来计算Canvas.Pixels[20,100]整度也没法计算
假如Bitmap的数据是按行存储的, ScanLine返回的是某行第一个像素的数据在内存中的地址。楼上所说的
那么请问我要最某行最的的一个呢还不要用FOR或while等,也没发现他真的会快;
SQLDebug_Fan 2010-03-06
  • 打赏
  • 举报
回复
引用 6 楼 jadeluo 的回复:
Bitmap的数据是按行存储的, ScanLine返回的是某行第一个像素的数据在内存中的地址。

正解,从效率上来说比Canvas.Pixels[x,y]快很多很多。
zzwu 2010-03-06
  • 打赏
  • 举报
回复
ScanLines比Canvas.Pixels[x,y]快得多的多的多的多的多的多的多的多!
我估计要相差2个数量级,至少一个数量级。
diruser 2010-03-05
  • 打赏
  • 举报
回复
给你一下例子,求图像亮度的
iCount:=0;
dY:=0;
for j := 64 to 248 do
begin
P := bmp.ScanLine[j];
for i := 16 to 256 do
begin
//访问像素 RGB
b:=P^.rgbtBlue;
g:=P^.rgbtGreen;
r:=P^.rgbtRed ;
inc(P);//指向下一个像素
dY:=dY+r*30+g*59+b*11;
iCount:=iCount+1;
end;
end;

if iCount>0 then dY:=dy div iCount;
edit1.Text:=IntToStr(DY div 100);
无条件为你 2010-02-03
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 xzhifei 的回复:]
那我就要BS你了:),ScanLines都不用怎么搞图像处理
[/Quote]

ScanLines的功能可以用其它办法来实现啊。这个东西不好用,不懂。
bdmh 2010-02-02
  • 打赏
  • 举报
回复
ScanLine[Row: Integer],返回一个指向像素数组的指针
  • 打赏
  • 举报
回复
scanline返回某行像素的指针,直接通过此指针可以修改bitmap数据,更快。
无条件为你 2010-02-02
  • 打赏
  • 举报
回复
我觉得用Canvas.Pixels[x,y]就可以取得像素值或设置像素值。ScanLine方法我一般不用,好像返回一个指针什么的,看过相关代码一头雾水,后来就改用Canvas.Pixels[x,y]了,到现在也没有搞清楚楼主所说的ScanLine。
周药师 2010-02-02
  • 打赏
  • 举报
回复
获取像素颜色值
设置像素颜色值
brightyang 2010-02-02
  • 打赏
  • 举报
回复
主要是用来操作像素的
xzhifei 2010-02-02
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 mwy654321 的回复:]
我觉得用Canvas.Pixels[x,y]就可以取得像素值或设置像素值。ScanLine方法我一般不用,好像返回一个指针什么的,看过相关代码一头雾水,后来就改用Canvas.Pixels[x,y]了,到现在也没有搞清楚楼主所说的ScanLine。
[/Quote]

那我就要BS你了:),ScanLines都不用怎么搞图像处理
jadeluo 2010-02-02
  • 打赏
  • 举报
回复
Bitmap的数据是按行存储的, ScanLine返回的是某行第一个像素的数据在内存中的地址。

1,183

社区成员

发帖
与我相关
我的任务
社区描述
Delphi GAME,图形处理/多媒体
社区管理员
  • GAME,图形处理/多媒体社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧