Recent

Author Topic: make new layer with some points  (Read 3607 times)

aradeonas

  • Hero Member
  • *****
  • Posts: 824
make new layer with some points
« on: February 13, 2014, 03:06:58 pm »
hi
i want to cut my image with any line into new layer like this

how? ;D
« Last Edit: February 13, 2014, 05:58:22 pm by aradeonas »

aradeonas

  • Hero Member
  • *****
  • Posts: 824
Re: cut image with line
« Reply #1 on: February 13, 2014, 05:57:24 pm »
i try layers and lazpaint source but i cant found a way to make layer of a image with array of point
??

aradeonas

  • Hero Member
  • *****
  • Posts: 824
Re: make new layer with some points
« Reply #2 on: February 14, 2014, 03:07:53 pm »
answer:
Code: [Select]
procedure TForm1.Button3Click(Sender: TObject);
var
  Bitmap, Mask, BlurTemp: TBGRABitmap;
    image: TBGRABitmap;
    Points: array of TPointF;
begin
  image := TBGRABitmap.Create('p.jpg');
  Bitmap := TBGRABitmap.Create(clientwidth, clientheight, BGRAWhite);
  BlurTemp := image.Resample(Bitmap.Width, Bitmap.Height) as TBGRABitmap;

  Bitmap.PutImage(0, 0, BlurTemp, dmDrawWithTransparency);
  Mask := TBGRABitmap.Create(Bitmap.Width, Bitmap.Height, BGRABlack);
  Mask.FillPolyAntialias(Mask.ComputeOpenedSpline(Points, ssOutside), BGRAWhite);

  BlurTemp.ApplyMask(Mask);
  Mask.Free;
  BlurTemp := BlurTemp.FilterBlurRadial(5, rbfast) as TBGRABitmap;
  Bitmap.PutImage(0, 0, BlurTemp, dmDrawWithTransparency);



   setlength(Points, 10);
  Points[0] := PointF(20, clientheight / 2);
  Points[1] := Points[0] + pointF(100, 75);
  Points[2] := Points[1] + pointF(100, 50);
  Points[3] := Points[2] + pointF(100, -30);
  Points[4] := Points[3] + pointF(100, -50);
  Points[5] := Points[4] + pointF(100, 10);

  Points[6] := PointF(ClientWidth, clientheight / 2);
  Points[7] := PointF(ClientWidth, clientheight);
  Points[8] := PointF(0, clientheight);
  Points[9] := PointF(0, clientheight / 2);

  Bitmap.DrawPolyLineAntialias(Bitmap.ComputeOpenedSpline(Points, ssOutside),
    BGRAWhite, 2);



  BlurTemp.Free;
  Bitmap.draw(Canvas, 0, 0);
  Bitmap.Free;
end;

but DrawPolyLineAntialias isn't so good for this job.anyone know good replace?
oh,sorry for bad English ;)

aradeonas

  • Hero Member
  • *****
  • Posts: 824
ANSWER
« Reply #3 on: March 17, 2014, 07:54:26 am »
ANSWER:
so this code cut part of image , blur it and replace it with original part
Code: [Select]
procedure TForm1.Button3Click(Sender: TObject);
var
  Bitmap, Mask, BlurTemp: TBGRABitmap;
begin

  Bitmap := TBGRABitmap.Create(clientwidth, clientheight, BGRAWhite);
  BlurTemp := image.Resample(Bitmap.Width, Bitmap.Height) as TBGRABitmap;

  Bitmap.PutImage(0, 0, BlurTemp, dmDrawWithTransparency);
  Mask := TBGRABitmap.Create(Bitmap.Width, Bitmap.Height, BGRABlack);
  Mask.FillPolyAntialias(Mask.ComputeOpenedSpline(Points, ssOutside), BGRAWhite);

  BlurTemp.ApplyMask(Mask);
  Mask.Free;

  BlurTemp := BlurTemp.FilterBlurRadial(5, rbfast) as TBGRABitmap;

  Bitmap.PutImage(0, 0, BlurTemp, dmDrawWithTransparency);




  Points[0] := PointF(20, clientheight / 2);
  Points[1] := Points[0] + pointF(100, 75);
  Points[2] := Points[1] + pointF(100, 50);
  Points[3] := Points[2] + pointF(100, -30);
  Points[4] := Points[3] + pointF(100, -50);
  Points[5] := Points[4] + pointF(100, 10);

  Points[6] := PointF(ClientWidth, clientheight / 2);
  Points[7] := PointF(ClientWidth, clientheight);
  Points[8] := PointF(0, clientheight);
  Points[9] := PointF(0, clientheight / 2);
  Bitmap.DrawPolyLineAntialias(Bitmap.ComputeOpenedSpline(Points, ssOutside),
    BGRAWhite, 2);

  for i := 0 to high(pts) do
    Bitmap.FillEllipseAntialias(Points[i].x, Points[i].y, 5, 5, BGRABlack);




  BlurTemp.Free;

  Bitmap.draw(Canvas, 0, 0);

  Bitmap.Free;
  end;

BigChimp

  • Hero Member
  • *****
  • Posts: 5740
  • Add to the wiki - it's free ;)
    • FPCUp, PaperTiger scanning and other open source projects
Re: make new layer with some points
« Reply #4 on: March 17, 2014, 09:08:17 am »
Thanks for posting your solution - hope this will help others if they have similar problems!
Want quicker answers to your questions? Read http://wiki.lazarus.freepascal.org/Lazarus_Faq#What_is_the_correct_way_to_ask_questions_in_the_forum.3F

Open source including papertiger OCR/PDF scanning:
https://bitbucket.org/reiniero

Lazarus trunk+FPC trunk x86, Windows x64 unless otherwise specified

 

TinyPortal © 2005-2018