首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

咨询一个关于StretchDraw连续加载BMP的有关问题

2012-03-11 
咨询一个关于StretchDraw连续加载BMP的问题我是想新建一个大的BMP,然后把两张或者多张BMP,统一画到一个BMP

咨询一个关于StretchDraw连续加载BMP的问题
我是想新建一个大的BMP,然后把两张或者多张BMP,统一画到一个BMP里,比如有两个BMP,高宽都是400,那么我新一个BMP高400,宽400,把两张图片并排画,代码如下:

C/C++ code
if(!FileExists(".\\X.jpg") || !FileExists(".\\H.jpg")){  return;}Graphics::TBitmap *bmp = new Graphics::TBitmap();Graphics::TBitmap *bms = new Graphics::TBitmap();try{  bmp->Width  = 400;  bmp->Height = 800;  bmp->PixelFormat = pf32bit;  bms->PixelFormat = pf32bit;  TJPEGImage *jpeg = new TJPEGImage();  try  {    jpeg->LoadFromFile(".\\X.jpg");    bms->Assign(jpeg);  }  __finally  {    delete jpeg;    jpeg = NULL;  }  bms->SaveToFile("1.BMP");  bmp->Canvas->StretchDraw(Rect(0, 0, 400, 400),bms);  bmp->SaveToFile("2.BMP");  TJPEGImage *jpeg1 = new TJPEGImage();  try  {    bms->FreeImage();    jpeg1->LoadFromFile(".\\H.jpg");    bms->Assign(jpeg1);  }  __finally  {    delete jpeg1;    jpeg1 = NULL;  }  bms->SaveToFile("3.BMP");  bmp->Canvas->StretchDraw(Rect(400, 0, 800, 400),bms);  bmp->SaveToFile("4.BMP");}__finally{  bmp->FreeImage();  delete bmp;  bmp = NULL;  bms->FreeImage();  delete bms;  bms = NULL;}

这样出来的效果是第二张就会是空白,只有第一张图片复制过来了,但是如果加载第二图片(H.JPG)的时候不使用bms这个变量,在新建一个TBitmap的指针就可以了,请问怎么样处理这样的问题呢?

[解决办法]
楼主试试这个
if(!FileExists(".\\X.jpg") || !FileExists(".\\H.jpg"))
{
return;
}
Graphics::TBitmap *bmp = new Graphics::TBitmap();
Graphics::TBitmap *bms = new Graphics::TBitmap();
try
{
bmp->Width = 400;
bmp->Height = 800;
bmp->PixelFormat = pf32bit;
bms->PixelFormat = pf32bit;

TJPEGImage *jpeg = new TJPEGImage();
try
{
jpeg->LoadFromFile(".\\X.jpg");
bms->Assign(jpeg);
}
__finally
{
delete jpeg;
jpeg = NULL;
}

bms->SaveToFile("1.BMP");
bmp->Canvas->StretchDraw(Rect(0, 0, 400, 400),bms);
bmp->SaveToFile("2.BMP");

TJPEGImage *jpeg1 = new TJPEGImage();
try
{
bms->Dormant() ;
jpeg1->LoadFromFile(".\\H.jpg");
bms->Assign(jpeg1);
}
__finally
{
delete jpeg1;
jpeg1 = NULL;
}

bms->SaveToFile("3.BMP");
bmp->Canvas->StretchDraw(Rect(0, 400, 400, 800),bms);
bmp->SaveToFile("4.BMP");
}
__finally
{
bmp->FreeImage();
delete bmp;
bmp = NULL;
bms->FreeImage();
delete bms;
bms = NULL;
}
[解决办法]
结合StretchBlt这个函数完成。
C/C++ code
  bms->SaveToFile("3.BMP");  StretchBlt(bmp->Canvas->Handle ,0, 400, 400, 400,bms->Canvas->Handle,0,0,bms->Width,bms->Height,SRCCOPY);  //bmp->Canvas->StretchDraw(Rect(0, 400, 800, 400),bms);  bmp->SaveToFile("4.BMP"); 

热点排行