一个小问题,怎么样切割图片(100分)

  • 主题发起人 主题发起人 chenybin
  • 开始时间 开始时间
C

chenybin

Unregistered / Unconfirmed
GUEST, unregistred user!
我学DELPHI时间不长

我想作个类似纸牌的游戏,我现在手上有一个BMP的图片,里面包含了所有的牌面的图片
(图片整齐排列)

但是是一个整体,我想让我的纸牌游戏可以使用这个图片,但是我不知道怎么样使用该图片
的其中一部分,也就是我可以只要知道里面的相对位置,比如是第几排
,第几列,我怕就可以获得其中的图片
图片里面的排列是很整齐的,我想如果可以实现的化,我以后
还可以作其他的游戏,把这个功能提取为一个公用的东西
我想是用两个IMAGE,一个是放整个的图片,但是不显示,另外一个是显示一张纸牌

我不知道怎么样去实现它,高手见笑了.
 
BOOL StretchBlt(

HDC hdcDest, // handle of destination device context
int nXOriginDest, // x-coordinate of upper-left corner of dest. rect.
int nYOriginDest, // y-coordinate of upper-left corner of dest. rect.
int nWidthDest, // width of destination rectangle
int nHeightDest, // height of destination rectangle
HDC hdcSrc, // handle of source device context
int nXOriginSrc, // x-coordinate of upper-left corner of source rectangle
int nYOriginSrc, // y-coordinate of upper-left corner of source rectangle
int nWidthSrc, // width of source rectangle
int nHeightSrc, // height of source rectangle
DWORD dwRop // raster operation code
);

var
l,t,r,b:Integer;

l:=100;
t:=100;
w:=400;
h:=300;

Dest.Width:= w;
Dest.height:= h;
//设置SetStretchBlt的copy模式
SetStretchBltMode(Dest.Canvas.Handle, HalfTone);
//copy局部图象
StretchBlt(Dest.Canvas.Handle, 0, 0, Dest.Width-1, Dest.Height-1, Src.Canvas.Handle, l, t, w, h, SRCCOPY);


 
我这样作过的,效果是不是其中一张,而且

比一张多比两张少
 
最简单的图象局部copy 问题哦上述方法可以实现
 
copyrect 好像是不太行,我昨天作了很长时间

其实我希望是最好不通过两个IMAGE的方法

而是直接就可以对文件进行操作,当然不损害原文件
 
procedure TForm1.Button1Click(Sender: TObject);
var
Bitmap: TBitmap;
rectd,rects:Trect;
begin
BitMap:=TBitMap.Create;
rectd:=rect(0,0,(selectendx-selectstartx),(selectendy-selectstarty));
rects:=rect(selectstartx,selectstarty,selectendx,selectendy);
BitMap.LoadFromFile('c:/test.bmp');
bitmap.canvas.CopyRect(rectd,bitmap.canvas,rects);
form2.show;
Form2.image1.Picture.Bitmap:=bitmap;
Bitmap.Free;
end;

而且好像是类似这样的方法

他显示的纸牌始终是比一张打,比两张小,,就是说把其他的纸牌的内容也截取了部分出来了
 
不知道哪位高手作过类似的问题

不过首先声明,我不要那种把这个图片一个一个分割掉成为一个个小文件的方法
 
这也叫问题?
还值100分,我就不给你代码了
去检查你的rects和rectd:
CopyRect是可行的
另外还可以用
ScanLine扫描点进行赋值
 
大家都是从这个时候过来的 没有不容许谁问这样的问题哦 你看我以前的帖子 还有比这个还菜的
问题 谁有耐心就讲一下了
看了一下
同意楼上的 你先检查两TRect
你这里不应该用bitmap.canvas.CopyRect(rectd,bitmap.canvas,rects);
bitmap的Width,Height还是在
BitMap.LoadFromFile('c:/test.bmp');
时test.bmp的尺寸
而你在
bitmap.canvas.CopyRect(rectd,bitmap.canvas,rects);
这句等于将局部图象缩放到
bitmap.Width,bitmap.Height的大小
再创建一个TBitmap,然后对其设置目标尺寸
 
真是让高手见笑了

我晚上回家在看看

谢谢amakusa, 80年代两位高手
 
就是你的rect的问题
 
解决了

用bitblt
 
后退
顶部