请教一下怎么用Delphi实现对图像的局部剪切?(50分)

  • 主题发起人 主题发起人 articom
  • 开始时间 开始时间
A

articom

Unregistered / Unconfirmed
GUEST, unregistred user!
需要实现把一幅图中的局部选中并剪切下来保存在剪贴板或者另一个Image里面
麻烦各位了!
我现在弄的老是只能剪贴到原图中
而且即使剪下了剪贴板里面的内容也是整幅图
弄不大懂怎么回事
下面是我的代码:
procedure TForm1.cutExecute(Sender: TObject); //图像剪切
var
ARect,ARect1:TRect;
begin
copyExecute(Sender);
with Image1.Canvas do
begin
CopyMode:=cmWhiteness;
ARect:=Rect(Kx1,Ky1,Kx2+1,Ky2+1);
ARect1:=Rect(0,0,Kx2+1-Kx1,Ky2+1-Ky1);
CopyRect(ARect1,Image1.Canvas,ARect);
CopyMode:=cmSrcCopy;
end;
end;

procedure TForm1.copyExecute(Sender: TObject); //复制
begin
Clipboard.Assign(Image1.Picture);
end;

procedure TForm1.pasteExecute(Sender: TObject); //粘贴
var
Bitmap:TBitmap;
begin
if Clipboard.HasFormat(CF_BITMAP) then
begin
Bitmap:=TBitmap.Create;
try
Bitmap.Assign(Clipboard);
Image2.Canvas.Draw(0,0,Bitmap);
finally
Bitmap.Free;
end;
end;
end;
 
你看一下bitblt函数,就可以实现;
 
刚找到代码
局部剪切
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, ExtDlgs;

type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
OpenPictureDialog1: TOpenPictureDialog;
Image1: TImage;
Button3: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
hbm:HBITMAP;
hdcImage:HDC;
bm:BITMAP;
begin
hbm:=LoadImage(0,'f:/1.bmp',IMAGE_BITMAP,0,0,LR_LOADFROMFILE or LR_CREATEDIBSECTION);
hdcImage := CreateCompatibleDC(0);
SelectObject(hdcImage, hbm);
GetObject(hbm, sizeof(bm), @bm);
BitBlt(Self.canvas.handle, 0, 0, bm.bmWidth, bm.bmHeight, hdcImage, 0, 0, SRCCOPY);
DeleteDC(hdcImage);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
if OpenPictureDialog1.Execute then
Image1.Picture.LoadFromFile(OpenPictureDialog1.FileName);
end;

procedure TForm1.Button3Click(Sender:TObject);
var
Bmp :TBitmap;
FRgn :HRGN;
begin
Bmp :=TBitmap.Create;
Bmp.PixelFormat :=Image1.Picture.Bitmap.PixelFormat;
Bmp.Width :=300;
Bmp.Height :=300;
BitBlt(Bmp.Canvas.Handle,0,0,Bmp.Width,Bmp.Height,Image1.Canvas.Handle,80,80,SRCCOPY); //要拷贝的位图
FRgn :=CreateEllipticRgn(0,0,100,200);
SelectClipRgn(Image1.Canvas.Handle,FRgn);
Image1.Canvas.Draw(0,0,Bmp);
Bmp.Free;
DeleteObject(FRgn);
end;

end.
 
谢谢哈
我实践一下看看
那个hdcImage := CreateCompatibleDC(0);
表示什么意思啊?
 
我实践了一下
实现了
呵呵
谢谢了
 
后退
顶部