ImageEn for Delphi and C++ Builder ImageEn for Delphi and C++ Builder

 

ImageEn Forum
Profile    Join    Active Topics    Forum FAQ    Search this forumSearch
Forum membership is Free!  Click Join to sign-up
Username:
Password:
Save Password
Forgot your Password?

 All Forums
 ImageEn Library for Delphi, C++ and .Net
 ImageEn and IEvolution Support Forum
 Create a Clone Brush
 New Topic  Reply to Topic
Author Previous Topic Topic Next Topic  

John@Field

United Kingdom
13 Posts

Posted - Mar 10 2014 :  13:55:57  Show Profile  Reply
I would like to copy one part of an image to another part of the image
in the same way that it is done with the clone brush in PaintshopPro.

Any suggestions would be much appreciated.

JWA

John@Field

United Kingdom
13 Posts

Posted - Mar 10 2014 :  13:58:22  Show Profile  Reply
I would also like to add a feather effect to the result

JWA
Go to Top of Page

w2m

USA
1990 Posts

Posted - Mar 10 2014 :  15:20:15  Show Profile  Reply
http://www.nwscomps.com/pe.html

William Miller
Go to Top of Page

John@Field

United Kingdom
13 Posts

Posted - Mar 11 2014 :  03:14:30  Show Profile  Reply
Thanks I will look into it.

JWA
Go to Top of Page

spetric

Croatia
308 Posts

Posted - Mar 11 2014 :  07:32:38  Show Profile  Reply
The best way to do this task is to determine region of interest (ROI/bounding rectangle) over cloning image with the same size as your cloning brush. Then, while you're moving your mouse over some image (we will call it Image1), you need to copy region of interest from cloning image (Image2) to to Image1 using gray-scale mask that represents your brush tip.

Actually, you have two mouse positions: real on Image1 and calculated (virtual) on Image2.

It can be also done using off-screen bitmap with same size as your cloning brush tip.

Also, you need to take care when position of your brush tip exceeds Image2 width/height (wrapping may be performed).

I do this task using low-level byte access routines, but it can be achieved using ImageEn methods.
Go to Top of Page

John@Field

United Kingdom
13 Posts

Posted - Mar 13 2014 :  15:49:27  Show Profile  Reply
Thanks spectric

I have managed to clone an area using a technique similar to the one you suggested. I am now working on the feathering.

JWA
Go to Top of Page

spetric

Croatia
308 Posts

Posted - Mar 13 2014 :  16:06:02  Show Profile  Reply
That's a good idea to use selection as brush tip and then move selection across the image(s).

Are you using two identical selections on both images?
Go to Top of Page

John@Field

United Kingdom
13 Posts

Posted - Mar 14 2014 :  14:03:51  Show Profile  Reply
Thanks again spectric,

I am not sure how to copy one selection to another Yet as I am new to
ImageEn.

The method I am using is similar, I think, to the low level byte
routines you mention.

I am selecting an area using a right mouse click then move the
mouse to where I want to place the copy. Then pressing the left
mouse button, pick up one area and place it in another several
pixels at a time. This is continues while I drag the mouse over
the new area.

The pixel copying is done using the following Function.

iRad = Radius
S & P Select & Place Points
Image1 the image to be cloned.

Call the function.

ImageEnView1 := CopySelection(1, Sel, Place, ImageEnView1);

function TCloneForm.CopySelection(iRad: Integer; S, P: TPoint;
Image1: TImageEnview): TImageEnview;
var
Rad, x, xx, yy, y : integer; { x is the column y is the row }
Horz, Vert : Integer;
ItemRad : Double;
begin
xx := iRad * 2; { The Radius x 2}
yy := iRad * 2;
Rad := iRad;

for y := 0 to yy do
begin
for x := 0 to xx do
begin
{This Calculates the radius to Keep the Pixels within the circle}
Horz := sqr(Rad - X);
Vert := sqr(Rad - Y);
ItemRad := Sqrt(Horz + Vert); { is it in the circle }
{ PixColour : array[0..100] of array[0..100] of TColor; }
{ If the pixel is within the radius then copy it }
if (ItemRad <= Rad) then
begin
PixColour[y, x] := Image1.Bitmap.Canvas.Pixels[S.X + x - Rad, S.Y + y - Rad];
Image1.Bitmap.canvas.pixels[P.X + x - Rad, P.Y + y - Rad] := PixColour[y, x];
end;
end;
end;

Result := Image1;
end;


JWA
Go to Top of Page
  Previous Topic Topic Next Topic  
 New Topic  Reply to Topic
Jump To: