首页
社区
课程
招聘
[旧帖] 设置壁纸(或图片)拉伸的问题 0.00雪花
发表于: 2010-1-18 05:28 4714

[旧帖] 设置壁纸(或图片)拉伸的问题 0.00雪花

2010-1-18 05:28
4714
我有一张 1280 * 800 的图片, 系统当前的分辨率是 1024 *768 的, 我把1280 * 800 的图片缩成 1024 *768(必需做), 后另存为图片, 发现失真了: 但Windows 桌面壁纸用1280 * 800 的图片(系统当前的分辨率是 1024 *768) , 不会出现失真的情况, 不知"桌面壁纸"是如何实现"拉伸"的?

下面是我导致失真的代码:

uses jpeg;  

procedure TForm1.Button1Click(Sender: TObject);  
var
  S: TJPEGImage;  
  D: TBitmap;  

begin

S := TJPEGImage.Create;  

ChDir('C:\Documents and Settings\All Users\Documents\My Pictures\示例图片\');  

S.LoadFromFile('Sunset.jpg');  

D := TBitmap.Create;  

D.Width := screen.Width;  

D.Height :=screen.Height ;  

D.Canvas.StretchDraw(Rect(0, 0, screen.Width, screen.Height ), S);  // 失真了

//Canvas.Draw(0, 0, S);  
D.SaveToFile('C:\123.bmp');
S.Free;  

D.Free;
  
end;

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (7)
雪    币: 458
活跃值: (421)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
2
搜了一下没找到 1280*800的壁纸,尴尬~~   我认为windows的桌面将 1280*800的壁纸  设定到分辨率为 1024*768,在拉伸那个选项的时候 肯定会扭曲啊   等我找个 1280*800的壁纸再试试~
2010-1-18 09:10
0
雪    币: 12
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
1280X800是16:10,1024X768是4:3,你缩一下就会变形啊。
如果是1280X800的图片想设为壁纸,把位置选为“居中”或“平铺”就好了啊,如果选“拉伸”还是一样的变形啊。

不知道你这是什么语言代码,我班门弄斧一下吧。如果确定是1280*800设成1024*768

D.Width := screen.Width;  

D.Height :=screen.Height ;

这个我猜是转变后的图片大小吧,
改成

D.Width := screen.Width*12/10;  

D.Height :=screen.Height;


把图片改成合适大小,再移动一下坐标居中
D.Canvas.StretchDraw(Rect(-102, 0, screen.Width, screen.Height ), S);
2010-1-18 09:16
0
雪    币: 189
活跃值: (4810)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
4
1280*800的壁纸:

http://www.zhuoku.com/
2010-1-18 09:32
0
雪    币: 189
活跃值: (4810)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
5
拉伸也不会啊,你试试。

“居中”或“平铺”看不全的。
2010-1-18 09:35
0
雪    币: 12
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
我找了一张很大的 1200X1792的大图,用了拉伸明显变形了。

分辨率的话,会不会你用的是1024X768的分辨率,
然而你却启动了显卡的缩放功能?

我试了一下,我屏幕是1280X800的,我找了一张1280X800的图片,使用1024X768的分辨率,启动NVIDIA的缩放功能,这样图片是不会变形的。
2010-1-18 09:37
0
雪    币: 96
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
跟着前辈们学习学习
2010-1-18 09:43
0
雪    币: 189
活跃值: (4810)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
8
其实我的目的和"非安全" 大侠是一样的, 要把图片大小先改成当前的分辨率大小, 再在上面画其它图的, 按你说的 D.Width := screen.Width*12/10;  ;  如果当前分辨率是 1024 *768 的,  D.Width 不就是 "1228.8", 这样就大于屏幕了, 因我要在图上面再画上其它, 如图标位置相对的BACK.....

http://bbs.pediy.com/showthread.php?t=102605
2010-1-18 18:37
0
游客
登录 | 注册 方可回帖
返回
//