如何在将一个image图片按比例缩放后在Canves上按指定的个数以及大小排列(200分)

  • 主题发起人 主题发起人 maxim
  • 开始时间 开始时间
M

maxim

Unregistered / Unconfirmed
GUEST, unregistred user!
各位大哥,我现在要编写一个图形排版功能,图形由image加载并按我提供的长宽缩放
我在另一地方指定要排列的个数,在指定长宽Canves上排列出来,并生产图形文件保存
在数据库上,以便下次调用。
 
请各位大侠多多指点,如果分数不够我可以加分呀。
 
給一個思路把。
1.首先先聲明一個矩形類型的列表。
Type
RecArr:Array of array of TRect
Var ARec:Array of array of RecArr; 二維Trect數組
2.然後根據你提供的參數來初始化數組
比如 你要在設定成 水平5個,垂直5個.那麼就可以初始化成
Setlength(Arec,5,5);
3.然後就根據上面提共的 水平X=5 ,y=5來計算出每個Rect在Canvas的坐標,長度,寬度
4.然後就用 Canvas.StretchDraw(Rect,Pic);來填充每一個矩形區域。
具體怎麼實現就由你自己來實現。不想再現醜了
 
對不起,好象我說錯了,我回去想了一下在一個是不可行的。我再想一下。
 
image排好后需不需要移动呢
 
http://www.delphibbs.com/keylife/iblog_show.asp?xid=294
作者?: CathyEagle
标题?: Delphi程序窗口动画及正常排列平铺的实现
关键字: 正常窗口 任务栏 系统菜单
分类?: 开发经验
密级?: 参赛
看看人家写的这个合不合你用?
 
先搞清楚:
image是一张,还是多张不同的?
是不是象这样排列?
1 2 3 4
5 6 7 8
9 10 11 12
行和列是假设的.
 
谢谢各位的指点,正如xuxiaohan所说的,image是一张,它可以
1 2 3 4
5 6 7 8
9 10 11 12
也可以是
1 4 7
2 5 8
3 6 9
我举个说明,image图片10*10,我加载时将它放大为15*15
并按我指定的方式 竖排或横排在 Canves 100*100上排列出我指定的个数
而且每个图片之间要按我给出的参数留点间隔。
而且行与列是虚设
 
maxim:
我试过了,我假设的 在500*500 的 canvas 上draw 48*48 的图片(由image中取得);Margin为5
如果要保存到数据库,你要用Draw 到Bitmap 上,将bitmap保存到数据库的 TBlobField中就可以啦。
procedure TForm1.Button1Click(Sender: TObject);
const
Margin = 5;
var
i,j : integer;
R: Trect;
Col, Row: integer;
begin
Col:=500 div (48+Margin);
Row:=500 div (48+Margin);
canvas.Brush.Color:=clWhite;;
canvas.FillRect(Rect(0,0,500,500));
for i:=0 to Col-1 do
for j:=0 to Row-1 do
begin
R:=Rect(i*48,j*48,(i+1)*48,(j+1)*48);
inflateRect(R,-Margin,-Margin);
canvas.StretchDraw(R,image1.Picture.Graphic);
end;
canvas.FrameRect(Rect(0,0,500,500));
end;
 
xuxiaohan:
你的回复我看到了,谢谢你,我是这样的设想,我们厂要搞一个
程序以实现在一个版上面(版的大小是不固定的),排列一些小图型
由于小图形有很多是不规则的,为节省版面需要对一些图形进行插入
处理(如菱型的图案排完一排后第二排是可以在第一排的基础上进行
插入排列从而节省一些空间)你的排列方式我以前也用过了,但效果
不理想,图形一旦缩小后会模糊,甚至变样,有些网友建议我用画的
形式,画完一个在第一个的基础上再画第二个画,依次类推,可我不
知该从何下手。还请你多指点。
另外我按照你的方式调整了Margin值的大小,但结果不明显,不
知我那里搞错。
 
图片怎么会有其他现状的呢?
是图片的内容有其他现状吧?
按照你的要求,很难做到的,因为无法判断图片的内容的什么形状呀?
 
后退
顶部