H
happymanfreeman
Unregistered / Unconfirmed
GUEST, unregistred user!
各位高手: 大家好!
许多截图软件都有这样的功能: 截图时先用BitBlt把图BitBlt到Form1->Image1上,
然后设置Form1->Visible=true; 使其显示出来,
保存时用Image1->Picture->SaveToFile(SaveDialog1->FileName);保存在硬盘上,
这样保存出来的bmp是ddb(设备相关位图)还是dib(设备无关位图) ?? 大概是ddb,
因为Tcanvas都是对GDI的封装, 而GDI都是设备相关的, 是吗 ?? 那么, 上述
截图后到底如何才能把Form1->Image1上的图保存为dib(设备无关位图) ?? 保存为8位,
24位, 32位的dib呢 ??
以下是上述截图并保存(我觉得没有保存为dib)的代码:
void __fastcall TForm1::CopyDesktopImageClick(TObject *Sender)
{
Form1->Visible=false;
// Initializations
Image1->Width=Screen->Width;
Image1->Height=Screen->Height;
// Give the Display time to refresh
Sleep(2000);
// Copy the Desktop to Image1
HDC hdc = GetDC(0);
BitBlt(Image1->Canvas->Handle,
0, 0, Screen->Width, Screen->Height,
hdc, 0, 0, SRCCOPY);
ReleaseDC(0, hdc);
// Show Form1
Form1->Visible=true;
}
void __fastcall TForm1::SaveAsClick(TObject *Sender)
{
int i=1;
SaveDialog1->FileName = "Captured1.bmp";
while (FileExists(SaveDialog1->FileName))
{
i++;
SaveDialog1->FileName = "Captured"+IntToStr(i)+".bmp";
}
if(SaveDialog1->Execute())
{
Image1->Picture->SaveToFile(SaveDialog1->FileName);
}
}
上述问题请教各位高手, 请给出正确的编程思路并给出代码, 谢谢 !!
(c++builder方面的, delphi亦可)
许多截图软件都有这样的功能: 截图时先用BitBlt把图BitBlt到Form1->Image1上,
然后设置Form1->Visible=true; 使其显示出来,
保存时用Image1->Picture->SaveToFile(SaveDialog1->FileName);保存在硬盘上,
这样保存出来的bmp是ddb(设备相关位图)还是dib(设备无关位图) ?? 大概是ddb,
因为Tcanvas都是对GDI的封装, 而GDI都是设备相关的, 是吗 ?? 那么, 上述
截图后到底如何才能把Form1->Image1上的图保存为dib(设备无关位图) ?? 保存为8位,
24位, 32位的dib呢 ??
以下是上述截图并保存(我觉得没有保存为dib)的代码:
void __fastcall TForm1::CopyDesktopImageClick(TObject *Sender)
{
Form1->Visible=false;
// Initializations
Image1->Width=Screen->Width;
Image1->Height=Screen->Height;
// Give the Display time to refresh
Sleep(2000);
// Copy the Desktop to Image1
HDC hdc = GetDC(0);
BitBlt(Image1->Canvas->Handle,
0, 0, Screen->Width, Screen->Height,
hdc, 0, 0, SRCCOPY);
ReleaseDC(0, hdc);
// Show Form1
Form1->Visible=true;
}
void __fastcall TForm1::SaveAsClick(TObject *Sender)
{
int i=1;
SaveDialog1->FileName = "Captured1.bmp";
while (FileExists(SaveDialog1->FileName))
{
i++;
SaveDialog1->FileName = "Captured"+IntToStr(i)+".bmp";
}
if(SaveDialog1->Execute())
{
Image1->Picture->SaveToFile(SaveDialog1->FileName);
}
}
上述问题请教各位高手, 请给出正确的编程思路并给出代码, 谢谢 !!
(c++builder方面的, delphi亦可)