ScanLine怎么用啊?

firefox2000 2004-11-21 04:00:44
这个是Delphi帮助里的例子,怎么得到的图片不对呢?我要得到旋转后的图片还有其它好方法吗?主要是要求速度快一点的
var
x,y : Integer;
BitMap : TBitMap;
P : PByteArray;
begin
BitMap := TBitMap.create;
try
BitMap.LoadFromFile('C:\Program Files\Common Files\Borland Shared\Images\Splash\256color\factory.bmp');
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;

我要得到旋转后的图片还有其它好方法吗?主要是要求速度快一点的
...全文
201 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
daviddelphilee 2005-07-21
  • 打赏
  • 举报
回复
图象处理和压缩,请加我,105497450
firefox2000 2004-12-03
  • 打赏
  • 举报
回复
我是想把位图旋转90度,不过没成功,由于是自己画的几何图形,所以只好自己重新画了一个90度的
ehom 2004-11-21
  • 打赏
  • 举报
回复
不过既然你已经知道了遇到问题查看帮助,看了ScanLine帮助的描述并理解后,应该是可以自己完成的~~~其实就是把源位图中的各像素的数据写到新位图的相应位置上,ScanLine的作用是获得每行的首地址.

其实每行都用ScanLine一样影响效率,我的建议是,获得位图数据的首地址(尾地址),只通过指针移动来遍历位图区域,效率可以高很多.不过这时候就需要多考虑一下每行位图数据DWORD对齐的问题,也就是移到行尾的时候要跳过填充的多余数据.
ehom 2004-11-21
  • 打赏
  • 举报
回复
帮助哪找来的例子,明显错了啊,看不出上面代码在旋转多少度,楼主明说吧~~~

你这是要旋转90度呢?180度?还是270度?
paukula 2004-11-21
  • 打赏
  • 举报
回复
如果只是要旋轉的圖片可以用控件阿,比如RotateImage之類的;
如果要自己寫,也可以參考控件原碼

5,388

社区成员

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

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