TBitmap的一个问题

albeta 2005-02-26 06:14:39
代码如下

try
{
Graphics::TBitmap * SourcePic = new Graphics::TBitmap();
Graphics::TBitmap * TempPic = new Graphics::TBitmap();
Graphics::TBitmap * DestPic = new Graphics::TBitmap();

TRect Rect,TempRect,DestRect;

TFileStream * JPEGFile = new TFileStream(SourceFile,fmOpenRead);
TJPEGImage *JPEGImage = new TJPEGImage();
JPEGImage->LoadFromStream(JPEGFile);

SourcePic->Assign(JPEGImage);
TempPic->PixelFormat = SourcePic->PixelFormat ;
DestPic->PixelFormat = SourcePic->PixelFormat ;

delete JPEGImage;
delete JPEGFile;
SourcePic->SaveToFile("C:\\1Source.bmp");//这里能够正常生成文件

GetBorderByChromatism(SourcePic, Rect);
GetCutRect(SourcePic, Rect);
SourcePic->SaveToFile("C:\\1SourceAgain.bmp");//这个文件也正常

TempPic->Width = Rect.Width();
TempPic->Height = Rect.Height();
TempRect.left = TempRect.top = 0;
TempRect.right = Rect.Width();
TempRect.bottom = Rect.Height();

TempPic->Canvas->CopyRect(TempRect,SourcePic->Canvas,Rect);
TempPic->SaveToFile("C:\\2Temp.bmp");//这个文件也正常

if( Rect.Width() > 1600 )
{
DestRect.right = 1600;
DestPic->Width = 1600;
DestRect.bottom = 1200;
DestPic->Height = 1200;
}
else if ( Rect.Width() > 1024 )
{
DestRect.right = 1024;
DestPic->Width = 1024;
DestRect.bottom = 768;
DestPic->Height = 768;
}
else
{
DestRect.right = 800;
DestPic->Width = 800;
DestRect.bottom = 600;
DestPic->Height = 600;
}

//画斜线
DestPic->Canvas->MoveTo(0,0);
DestPic->Canvas->LineTo(TempPic->Width-1, TempPic->Height-1);
DestPic->Canvas->StretchDraw(DestRect, TempPic);
TempPic->SaveToFile("C:\\2TempAgain.bmp");//这个文件也正常
DestPic->SaveToFile("C:\\3Dest.bmp"); //这个文件就是一条斜线,我StretchDraw或者CopyRect都不行,无论怎么都是生成一个空白的图片,上面只有一条斜线。

JPEGImage = new TJPEGImage();
JPEGImage->Assign(DestPic);
JPEGImage->SaveToFile(DestFile);

delete JPEGImage;

SourcePic->ReleaseHandle();
delete SourcePic;
delete TempPic ;
DestPic->FreeImage();
DestPic->ReleaseHandle();
delete DestPic ;
}
catch( Exception &e )
{
ShowMessage(e.Message);
}
return 0;
...全文
124 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
albeta 2005-03-01
  • 打赏
  • 举报
回复
up一下。没人知道么?
albeta 2005-02-26
  • 打赏
  • 举报
回复
GetBorderByChromatism
GetCutRect
两个函数重新设置一个Rect,里面就是取Rect的点。我可以直接设置Rect的值效果一样

Bug发现了。
DestPic->Canvas->StretchDraw(DestRect, TempPic);
中DestRect的left和top没有设置默认值。

现在有另外一个bug,如果在线程中跑,在SourcePic->SaveToFile("C:\\1SourceAgain.bmp");
这个地方就报Out of system resources,如果在窗口中跑,则能够达到目的,不知道为什么。
僵哥 2005-02-26
  • 打赏
  • 举报
回复
能否把下面两个过程的代码也贴来?
GetBorderByChromatism
GetCutRect

604

社区成员

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

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