关于GDI截图后保存为dib(设备无关位图)的问题(200分)

  • 主题发起人 主题发起人 happymanfreeman
  • 开始时间 开始时间
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亦可)
 
TBitmap(Image1.Picture).HandleType:=bmDIB;
 
没有研究过图形图象方面 不好意思哈
 
要把Image1上的图像保存为8位, 16位, 24位, 32位, 256位dib, 代码怎样写啊 ??
也许Image1上的图像已经是8位, 16位, 24位, 32位, 256位dib呢 ?? 那么此时只用
Image1->Picture1->SaveToFile(SaveDialog1->FileName)就已经保存为8位, 16位, 24位, 32位, 256位dib了 ??
 

Similar threads

后退
顶部