1 procedure TFrmPlay.MakeWallPic(sPic:String); //合并新墙纸
2 Var sBMP,sJPG:String; img,imgTmp:TImage;
3 JpegImage:TJpegImage;
4 udtblender:TBlendFunction;//图片效果处理参数
5 begin
6 with udtblender do
7 begin
8 Blendop:=AC_SRC_OVER;
9 Blendflags:=0;
10 SourceConstantAlpha:=255-spTransparent.Value;//透明度
11 AlphaFormat:=0;
12 end;
13
14 //s:=WinPath+'\'+ChangeFileExt(ExtractFileName(sPic),'.JPG');
15 sBmp:=Path+'DeskPic\'+ChangeFileExt(ExtractFileName(sPic),'.BMP');
16 sJPG:=Path+'DeskPic\'+ChangeFileExt(ExtractFileName(sPic),'.JPG');
17 img:=TImage.Create(nil);
18 imgTmp:=TImage.Create(nil); //创建BMP图片
19 JpegImage:=TJpegImage.Create; //创建JPG图片
20 try
21 img.AutoSize :=True;
22 img.Picture.LoadFromFile(sPic); //装载原始图片 //img.Picture.Assign(nil);
23 LoadBMPJPG(img,sPic);
24 //imgTmp.Picture.Assign(img.Picture);
25 imgTmp.Width :=img.Width;
26 imgTmp.Height :=img.Height;
27 imgTmp.Canvas.Draw(0,0,img.Picture.Graphic);//绘制到临时图片中
28 ShowHint(img);//在临时图片中绘制 提示文字信息
29 windows.AlphaBlend(imgTmp.Canvas.Handle,0,0,imgTmp.Width,imgTmp.Height,
30 img.Canvas.Handle,0,0,img.Width,img.Height,
31 udtblender); //关键调用api
32
33 imgTmp.Picture.Bitmap.SaveToFile(sBMP);//保存临时文件到磁盘
34
35 //保存最终的JPG的壁纸文件:
36 JpegImage.Assign(imgtmp.Picture.Graphic); //JpegImage.CompressionQuality:=100;
37 JpegImage.PixelFormat:=jf24Bit;
38 JpegImage.Compress;
39 JpegImage.SaveToFile(sJPG);
40 finally
41 img.Free;
42 imgTmp.Free;
43 JpegImage.Free; //edFile.Text :=sBMP;
44 if Fileexists(sBMP) then SetRegWallPaper(sBMP);//设置壁纸
45 sleep(50);
46 if Fileexists(sJPG) then SetWallPaper(sJPG,2); //设置壁纸
47 //MyDeleteFile(sBMP); //==不需要了!??
48 end;
49 end;
50
51 procedure TFrmPlay.ShowHint(img:TImage); //合成文字
52 Var i,n,h,w,size:Integer; s,s2,sHint,sfmt:String;
53 begin
54 sHint:=''; //需要回执的特殊格式的文字;
55 if chkShowDate.Checked then sHint:=MyDatestr(SysUtils.Date,True); //显示日期
56 if chkShowWeek.Checked then //显示星期
57 sHint:=sHint+' '+Days[DayofWeek(SysUtils.Date)];
58 if sHint<>'' then sHint:=sHint+'^^';
59
60 for i:=sgHint.RowCount -1 downto 1 do //计算文字行数
61 if sgHint.Cells[1,i]<>'' then
62 begin
63 n:=i;
64 Break;
65 end;
66
67 for i:=1 to n do //填加文字
68 sHint:=sHint+sgHint.Cells[1,i]+'^^';
69
70 n:=ItemsOfStr(sHint,'^^');
71 //img.Canvas.Font.Size:=24; //max(24,img.Height div 20) ;//==字体大小
72 img.Canvas.Font:=plHintFont.Font;
73
74 h:=img.Canvas.TextHeight('jy');
75 {while h*10>img.Height do
76 begin
77 img.Canvas.Font.Size:=img.Canvas.Font.Size-1;
78 if img.Canvas.Font.Size<10 then Break;
79 h:=img.Canvas.TextHeight('jy');
80 end; }
81 //h:=img.Canvas.TextHeight('jy');
82 size:=img.Canvas.Font.Size;
83 SetFontSmooth(True); //设置文字平滑绘制
84
85 sFmt:=FontToStr(plHintFont.font)+';~~'+colortostr(pledgeColor.Font.Color)+';~~'+inttostr(spedgeWidth.Value);//合成特定格式
86 ShowFmtTxt(img.Canvas,' ~~0~~0~~0~~'+sFmt,'');
87 for i:=1 to min(n,11) do //最多显示11行提示文字
88 begin
89 s2:=TextOfIndex(sHint,'^^',i);
90 s2:=Trim(s2);
91 w:=img.Canvas.TextWidth(s2);
92 s:='~~'+inttostr(img.Width-w-5)+'~~'+intTostr(i*h-h);
93 // s:=s+'~~0~~楷体_BG2312;'+inttostr(h)+';255;255;255;fsItalic~~16;16;16;~~1';
94 s:=s+'~~0~~'+sFmt;
95 ShowFmtTxt(img.Canvas,s2+s,'');
96 if chkSHowLine.Checked then
97 DrawLineH3(img.Width-w-5,i*h-1,w,img.Canvas,plLineColor.Font.Color,dRight);
98 end;
99 SetFontSmooth(oldTFONTSMOOTHING); //恢复原来的文字平滑方式
100 end;