ScanLine的优化问题!

lance 2002-04-03 06:07:51
//反色,即:底片效果
procedure NotColor(SrcBmp:Tbitmap);
var
i, j: integer;
SrcRow: pRGBArray;
ScanlineBytes:integer;
begin
ScanlineBytes:=SrcBmp.Width*3;

SrcRow := SrcBmp.ScanLine[0];

for i := 0 to SrcBmp.Height - 1 do
begin
for j := 0 to SrcBmp.Width - 1 do
begin
SrcRow[j].rgbtRed :=not SrcRow[j].rgbtRed ;
SrcRow[j].rgbtGreen :=not SrcRow[j].rgbtGreen;
SrcRow[j].rgbtBlue :=not SrcRow[j].rgbtBlue;
end;

dec(integer(SrcRow), ScanlineBytes); //老外写的是inc!!!
end;
end;

那个老外是Tjpegimage的作者.偶不太懂何时用inc何时用dec,与dib有关?
与os有关?与bmp有关?




...全文
59 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
lance 2002-04-04
  • 打赏
  • 举报
回复
偶自己搞定了。
dec(integer(SrcRow), ScanlineBytes);
的意思是把指针SrcRow指向的地址减少ScanlineBytes
也即指向前一行。
ScanLine[0];的地址比ScanLine[1]高
位图的第一行的地址最高,而最后一行的地址最小。
但是,有时候却相反,那个老外就是第二中情况。
我想可以通过ScanLine[0]-ScanLine[1]来判断。
=============
127+1=128
-128-1=-129
初一代数。

zx_wang 2002-04-04
  • 打赏
  • 举报
回复
应该用inc
newwen 2002-04-04
  • 打赏
  • 举报
回复
那127+1=?
-128-1=?
lance 2002-04-03
  • 打赏
  • 举报
回复
dec(integer(SrcRow), ScanlineBytes);
与inc(integer(SrcRow), ScanlineBytes);
能一样?
newwen 2002-04-03
  • 打赏
  • 举报
回复
好吧!大不了以后不看你的问题了!哪得罪了呢?!
lance 2002-04-03
  • 打赏
  • 举报
回复
拜托!看清楚了再说好不好!
newwen 2002-04-03
  • 打赏
  • 举报
回复
inc和dec都可以,0+1=1,0-1=1,1+1=0,1-1=0,...

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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