其实是上一个发布的帖子,最终还是没解决,再发一次帖子。代码的目的从image1控件的图片截取圆形区域到image2控件中,然后image2控件的图片要导出bmp文件,要求圆形区域走位是透明的。程序在win xp下运行没问题,截图的周边背景是透明的。 在win 7环境下就不行,周边背景是白色,不透明。能否请教是什么问题么?怎么解决?unit Unit1;interfaceuses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ExtCtrls;type
TForm1 = class(TForm)
Image1: TImage;
Image2: TImage;
Button1: TButton;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}uses jpeg;procedure TForm1.Button1Click(Sender: TObject);
var
Bitmap: TBitmap;
Rgn: HRGN; { long型}
jpeg: TJPEGImage;
begin
Bitmap := TBitmap.Create;
jpeg := TJPEGImage.Create; jpeg.Assign(image1.Picture.Graphic);
Bitmap.Assign(jpeg); Rgn := CreateEllipticRgn(0, 0, 150, 150); { 圆形区域}
SelectClipRgn(image2.Canvas.Handle, Rgn); image2.Transparent := True;
with image2.Canvas do
begin
Brush.Style := bsClear;
Draw(0, 0, Bitmap);
end;
Bitmap.Free;
jpeg.free;end;procedure TForm1.FormCreate(Sender: TObject);
begin
image1.Picture.LoadFromFile('..\..\bbbb.jpg');
end;end.在win7平台运行的屏幕效果如下:在win xp平台运行的屏幕效果如下:Windows XPWindows 7圆形区域截图 透明
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ExtCtrls;type
TForm1 = class(TForm)
Image1: TImage;
Image2: TImage;
Button1: TButton;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}uses jpeg;procedure TForm1.Button1Click(Sender: TObject);
var
Bitmap: TBitmap;
Rgn: HRGN; { long型}
jpeg: TJPEGImage;
begin
Bitmap := TBitmap.Create;
jpeg := TJPEGImage.Create; jpeg.Assign(image1.Picture.Graphic);
Bitmap.Assign(jpeg); Rgn := CreateEllipticRgn(0, 0, 150, 150); { 圆形区域}
SelectClipRgn(image2.Canvas.Handle, Rgn); image2.Transparent := True;
with image2.Canvas do
begin
Brush.Style := bsClear;
Draw(0, 0, Bitmap);
end;
Bitmap.Free;
jpeg.free;end;procedure TForm1.FormCreate(Sender: TObject);
begin
image1.Picture.LoadFromFile('..\..\bbbb.jpg');
end;end.在win7平台运行的屏幕效果如下:在win xp平台运行的屏幕效果如下:Windows XPWindows 7圆形区域截图 透明
解决方案 »
- 求将一文本框内的公式(字符串)转换成可计算的公式的算法
- 关于delphi 编写 isapi filter 利用IIS 过滤数据的问题,IIS5 和 IIS6的差异?
- 监视电骡下载完成情况!
- 在DELPHI中如何调用JAVA的WEB SERVICE
- 对网页操作的一个难题
- 怎样得知过去的任一天距离今天有多少天?
- web service 中用web dataModule的问题
- 关于在DELPHI中内嵌WORD的方法!
- BDE 和 ADO 的区别?
- 急死我了,怎么不理我,DELPHI程序员们,怎求不了此日期的记录(ACESS数据库)
- winio模拟键盘输入打开dephi的IDE时速度很快,关闭时则变慢
- 有没有Delphi EX版本的学习书籍可以推荐的,网上找不到呀
var
Bitmap: TBitmap;
Rgn: HRGN; { long型}
jpeg: TJPEGImage;
begin
Bitmap := TBitmap.Create;
jpeg := TJPEGImage.Create;
jpeg.Assign(image1.Picture.Graphic);
Bitmap.Assign(jpeg);
//加上下面两句就行了,作用是将Image2的背景色填充为窗口的颜色
image2.Canvas.Brush.Color := Self.Color;
image2.Canvas.FillRect(image2.ClientRect);
////////////////////////////////////////////////////////////
Rgn := CreateEllipticRgn(0, 0, 150, 150); { 圆形区域}
SelectClipRgn(image2.Canvas.Handle, Rgn);
//image2.Transparent := True;
with image2.Canvas do
begin
Brush.Style := bsClear;
Draw(0, 0, Bitmap);
end;
Bitmap.Free;
end;