热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

image组件里有个stretch属性,可以让图片拉伸铺满image组件的大小。如何实现平铺的效果?

image组件里有个stretch属性,可以让图片拉伸铺满image组件的大小。不过那样子的话,如果图像比较小,拉伸以后分辨率太低,很多象素点都看到了。如何才能实现平铺的效果?就跟Wi
image组件里有个stretch属性,可以让图片拉伸铺满image组件的大小。

不过那样子的话,如果图像比较小,拉伸以后分辨率太低,很多象素点都看到了。

如何才能实现平铺的效果?就跟Windows的墙纸或做网页时的背景平铺效果???

十分感谢!!!!

12 个解决方案

#1


平铺好象不好看哦

不如来个居中。

#2


呵呵,可是现在我需要的功能就是要平铺呀,不要居中。

#3


还是用PHOTOSHOP把图片平铺

#4


楼上的说的对,用PHOTOSHOP处理以后,再加到image里面

#5


用Proportional属性,为真

#6


来吧,我帮你写一个.

procedure TForm1.Button1Click(Sender: TObject);
var
  Bm:TBitmap;
  x,y,w,h:longint;
begin

//如果你的Image1中有图片的话就把它清空
  Image1.Picture:=nil;
//开始平铺
  try
    Bm:=TBitmap.Create;
    Bm.LoadFromFile('c:\1.bmp');//图片在此修改
    with Bm do
    begin
      w:=width;
      h:=height;
    end;
    y:=0;
    while y     begin
      x:=0;
      while x       begin
        image1.Canvas.Draw(x,y,Bm);
        inc(x,w);
      end;
      inc(y,h);
    end;
  finally
    Bm.Free;
  end;
end;

#7


image的属性中
Alien:alclient;
Stretch:true;

#8


Image不能自动实现此功能。自己画吧。

#9


unit main;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, jpeg, ExtCtrls, Menus, StdCtrls;
const
  CM_RESTORE=WM_USER+$1000;
type
  TFrm_main = class(TForm)
  private
    { Private declarations }
    //装载底图 -----
    FClientInstance,FPrevClientProc : TFarProc;
    PROCEDURE ClientWndProc(VAR Message: TMessage); 
    //---------------
  public
    { Public declarations }
  end;

var
  Frm_main: TFrm_main;

implementation
{$R *.dfm}

{ TFrm_main }

procedure TFrm_main.ClientWndProc(var Message: TMessage);
VAR 
  MyDC : hDC;
  Ro, Co : Word;
begin 
  with Message do
    case Msg of
      WM_ERASEBKGND:
        begin
          MyDC := TWMEraseBkGnd(Message).DC;
          FOR Ro := 0 TO ClientHeight DIV Image1.Picture.Height DO
          FOR Co := 0 TO ClientWIDTH DIV Image1.Picture.Width DO
          BitBlt(MyDC, Co*Image1.Picture.Width, Ro*Image1.Picture.Height,
          Image1.Picture.Width, Image1.Picture.Height,
          Image1.Picture.Bitmap.Canvas.Handle, 0, 0, SRCCOPY);
          Result := 1;
        end;
        else
          Result := CallWindowProc(FPrevClientProc, ClientHandle, Msg, wParam, lParam);
    end; 
end; 



procedure TFrm_main.FormCreate(Sender: TObject);
begin
  //====================================装载底图
  FClientInstance := MakeObjectInstance(ClientWndProc);
  FPrevClientProc := Pointer(GetWindowLong(ClientHandle, GWL_WNDPROC));
  SetWindowLong(ClientHandle, GWL_WNDPROC, LongInt(FClientInstance));  

end;
以上是参考别人的代码,呵呵

#10


把Proportional属性设为TRUE

#11


但是平铺效果并不好呀,图片都变形了,你可以设置图片尺寸就可以了吧

#12


zdcnow(磁效应)的效果很好!
seekmydoom(我的末日)的代码没有尝试。

结贴。

推荐阅读
author-avatar
胡印鉴_473
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有