图片移动的问题

luomh98 2003-09-19 01:14:25
我写了一个图片左移的子程序,
BmpBuffer保存了源图片
BmpTemp为一个已分配的位图指针,为处理方便设为8位方式(pf8bit)
Image1用来显示图片移动效果

int pw = BmpBuffer->Width, ph = BmpBuffer->Height ;
int ww = Image1->Width, wh = Image1-> Height;
int i, j, k;
Byte *ptrs, *ptrt;

BmpTemp->PixelFormat = pf8bit;
BmpTemp->Palette = BmpBuffer->Palette ;
BmpTemp->Width = ww; BmpTemp->Height = wh;
for (i=0; i<pw; i++, j--) {
for (j=0; j<ph; j++) {
ptrt = (Byte *)BmpTemp->ScanLine[j]; ptrs = ptrt+1;
for (k=0; k<ww-1; k++, ptrt++, ptrs++) *ptrt = *ptrs;
*ptrt = BmpBuffer->Canvas->Pixels[i][j];
}
Image1->Canvas->Draw(0,0,BmpTemp);
Application->ProcessMessages() ;
}

现在的问题是:
虽然图片移动效果出来了,
但是图片与原图片的颜色完全不一样了(能辨认出轮廓来)
经过分析发现问题出在下面语句上:
*ptrt = BmpBuffer->Canvas->Pixels[i][j];
读出的原图片象素颜色送到目标图片中显示就不对了,我估计是调色板或颜色转换的问题,但不知道如何解决!

...全文
42 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
yjy1001 2003-09-27
  • 打赏
  • 举报
回复
左滚动可以这样实现
timer中

Image1->Picture->LoadFromFile("C:\1.bmp"):
Image1->Visable=0;
TRect rect1=Rect(0,0,Tag,Image1->Height);
TRect rect2=Rect(0,0,Tag,Image2->Height);
Image2->Cavas->CopyRect(rect2,Image1->Cavas,rect1);
Tag++;

给分
还要什么图片移动花样
这里有几十中 呵呵


yjy1001 2003-09-27
  • 打赏
  • 举报
回复
Timer1 中;
Image1->Picture->LoadFromFile("C:\1.bmp"):
Image1->Visable=0;
TRect rect1=Rect(0,0,Tag,Image1->Height);
TRect rect2=Rect(0,0,Image2->Width,Image2->Height);
Image2->Cavas->CopyRect(rect2,Image1->Cavas,rect1);
Tag++;

这样就可以实现左移动不闪烁了


yjy1001 2003-09-27
  • 打赏
  • 举报
回复
用2个image image1保存要移动的图片,不可以见
image2为可见的,从image1中copyrect图片到image2中 就可以实现了
yjy1001 2003-09-27
  • 打赏
  • 举报
回复
哇 分数任我要啊……
好啊一个 花样变化 要50
我迟点整理给你
luomh98 2003-09-27
  • 打赏
  • 举报
回复
老兄你好:
谢谢帮助,请接分
若能提供其他几十种花样,请发给我,不胜感激!
我的邮箱: luomh98@vip.sina.com

分数任你要
luomh98 2003-09-20
  • 打赏
  • 举报
回复
我已经实现改变Image的left大小来滚动,
但还不能满足我的要求,必须要用象素操作

另外加问:如何消除画面闪烁
weibz0525 2003-09-19
  • 打赏
  • 举报
回复
相对屏幕的移动,改变Image的left的大小就可以了
如果想要位图左移,就象向左卷动的效果,你可以将第2个象素覆给第1个,第3个给第2个,依次类推,
PengMiao 2003-09-19
  • 打赏
  • 举报
回复
原图是8位图吗?原图的调色板不一定适应于Image上吧!
不要移动Image,你可以移动Bitmap在Image上的位置来实现移动!
不用重新生成图ba!!!
qiuafa 2003-09-19
  • 打赏
  • 举报
回复
Image1->Left = Image1->Left - 1; // 高定

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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