小问题,给个300分。(本人就是钱多,没办法。)(300分)

  • 主题发起人 主题发起人 vinlin
  • 开始时间 开始时间
V

vinlin

Unregistered / Unconfirmed
GUEST, unregistred user!
我需要把form上的一个panel上的全部内容保存为一个JPG文件。怎么做呢?
我4了一个getformimage函数,可以把当前form全部内容保存起来,但是我只需要其中一个部分。那位知道的告知一声,谢谢!
 
笨方法;
根据 TPanel 的坐标和大小对 getformimage 获得的图像进行剪切。
 
procedure TForm1.Button1Click(Sender: TObject);
var Bitmap:TBitmap;
Canvas:TCanvas;
dc:HDC;
begin
SavePictureDialog1.FileName := '';
dc := GetDC(Panel1.Handle);
if dc <> 0 then
begin
Canvas := TCanvas.Create;
Bitmap := TBitmap.Create;
try
Canvas.Handle := dc;
Bitmap.Width := Panel1.Width ;
Bitmap.Height := Panel1.Height;
Bitmap.Canvas.CopyRect(RECT(0,0,Panel1.Width,Panel1.Height),Canvas,Rect(0,0,Panel1.Width,Panel1.Height));
if SavePictureDialog1.Execute then
begin
Bitmap.SaveToFile(SavePictureDialog1.FileName);
end;
finally
Bitmap.Free;
Canvas.Free;
ReleaseDC(Panel1.Handle,dc);
end;
end;
end;
 
这个是保存为*.bmp文件的,如果你要保存jpe格式的,用JpegImage库转换一下就行了。
 
我给你提供转换:bmp-->jpg
//Uses JPEG;
procedure TForm1.BitBtn1Click(Sender: TObject);
Var
ajpeg: TJPEGImage;
abmp: TBitmap;
Begin
abmp:= TBitmap.Create;
try
abmp.LoadFromFile( 'c:/11.bmp' ); //要转换为JPG的BMP文件
ajpeg:= TJPEGImage.Create;
try
ajpeg.Assign(abmp);
ajpeg.CompressionQuality := 100; //压缩比 0 -100 效果递增
ajpeg.compress;
ajpeg.SaveTofile( 'c:/11.jpg');
finally
ajpeg.free
end;
finally
abmp.FreeImage;
FreeandNil(abmp);
end;
end;
 
[xiaopei]写的仅对有Handle的控件有效,俺稍微改进一下,可以试用于从TControl继承下来的所有控件,如例中的 Image1 :)

procedure TForm1.Button1Click(Sender: TObject);
procedure SaveAsJpeg(BMP: TBitmap; FileName: string);
var
Jpg: TJPEGImage;
begin
Jpg := TJPEGImage.Create;
try
Jpg.Assign(BMP);
Jpg.CompressionQuality := 100;
Jpg.Compress;
Jpg.SaveToFile(FileName);
finally
FreeAndNil(Jpg);
end;
end;
var
Bitmap:TBitmap;
DC:HDC;
ATopLeft: TPoint;
begin
SavePictureDialog1.FileName := '';
with Image1 do
begin
DC := GetDC(0);
ATopLeft := ClientToScreen(Point(0, 0));
if DC <> 0 then
begin
Bitmap := TBitmap.Create;
try
Bitmap.Width := Width ;
Bitmap.Height := Height;
StretchBlt(Bitmap.Canvas.Handle, 0, 0, Width, Height, dc,
ATopLeft.X, ATopLeft.Y, Width, Height, SRCCOPY);

with SavePictureDialog1 do
if Execute then
begin
if UpperCase(ExtractFileExt(FileName)) = '.JPG' then
SaveAsJpeg(Bitmap, FileName)
else if UpperCase(ExtractFileExt(FileName)) = '.BMP' then
Bitmap.SaveToFile(FileName);
end;
finally
FreeAndNil(Bitmap);
ReleaseDC(0,DC);
end;
end;
end;
end;
 
使用xifengge的办法解决了。 谢谢各位!分数已经发出,如果几位的确需要的话,回帖给我,我还有几百分。都可以给大家。
 
多人接受答案了。
 
后退
顶部