Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
ImageViewer BitmapScale Hk.
#1
Merhaba;

ImageViewer nesnesinin BitmapScale ile görüntüyü uzaklaştırıp yakınlaştıryorum bu işlemi yapmadan önce Rectangle  ile seçim yaptığımda doğru yeri alabiliyorken uzaklaştırıp yakınlaştırınca doğru yeri alamıyorum.  Resim boyutu değiştiğinde doğru alanı nasıl seçebilirim.

Forma bir adet ImageViewer, TrackBar1, Rectangle ekliyorum.

 private
  Selecting: Boolean;

procedure TForm1.ImageViewerMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Single);
begin
      Selecting := true;
      Rectangle.Position.X := X;
      Rectangle.Position.Y := Y;
      Rectangle.Width := 0;
      Rectangle.Height := 0;
end;

procedure TForm1.ImageViewerMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Single);
begin
  if Selecting then
  begin
    Rectangle.Width := X - Rectangle.Position.X;
    Rectangle.Height := Y - Rectangle.Position.Y;
  end;
end;


procedure TForm1.ImageViewerMouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Single);
begin
  if Selecting then
  begin
    Selecting := False;
    Rectangle.Width := X - Rectangle.Position.X;
    Rectangle.Height := Y - Rectangle.Position.Y;
    ImageViewer.RealignContent;
  end;
end;


procedure TForm1.TrackBar1Change(Sender: TObject);
begin
  ImageViewer.BitmapScale := TrackBar1.Value / 100;
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
Memo1.Lines.Add( CurrToStr(Round(Rectangle.Position.X)* TrackBar1.Value / 100));
Memo1.Lines.Add( CurrToStr(Round(Rectangle.Position.Y)* TrackBar1.Value / 100));
Memo1.Lines.Add( CurrToStr(Round(Rectangle.Width)* TrackBar1.Value / 100));
Memo1.Lines.Add( CurrToStr(Round(Rectangle.Height)* TrackBar1.Value / 100));
end;

2aG2nd.gif

Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız. Örnek kodlar
Cevapla
#2
Kardeşim doğru anladığımdan emin değilim ama bir cevap vermiş olayım.

Referans seçim nesnesinin konumunu asıl nesnenin bir oranı olarak ifade etmen işini kolaylaştıracaktır.

Sol: %20
Sağ: %24
Üst: %50
Alt: %58

Veyahut doğrudan orjinal boyut cinsinden tutup bunu oranlamak daha iyi bir çözüm olabilir.
Böylece küsüratlar yuvarlandıktan sonra geri dönüşte sapmalar yaşanmaz.
Cevapla
#3
Ben de 3 kez okumama rağmen tam olarak anlayamadım Sad
"Doğru alan"dan kasıt nedir ?
There's no place like 127.0.0.1
WWW
Cevapla
#4
Merhaba,
Cevaplar için  teşekkür ederim. Evet tam anlatamamışım.

BitmapScale := 1 iken Rectangle  ile seçtiğim bölge doğru geliyor. Örneğin BitmapScale := 0.5 yaptığımda resmin x,y koordinatları değiştiğinden Rectangle  ile resimde seçtiğim alan gerçek resmin x,y koordinatları olmuyor böylelikle seçili bölgede işlem yapamıyorum.  Blush

*Yani BitmapScale := 0.5 yaptığımda resim küçülüyor fakat ImageViewer nesnesinin align Client olduğundan işler karışıyor olabilir  Rolleyes
*Resmi BitmapScale ile büyütüp küçülttüğümde Rectangle ile seçtiğim alanadaki resim doğru gelmesini nasıl sağlarım. Sanırım bu işlemde öncelikle resmin tamamının x,y koordinatlarına almam ve sonrasında resim küçüldüğünde bunu oranlamam gerekiyor.

Teşekkürler.
Cevapla
#5
Paylaştığınız kodları deneme şansım şuanda yok ama koordinatları alırken ScreenToClient yada ClientToScreen kullanmak gerek sanırım.
There's no place like 127.0.0.1
WWW
Cevapla




Konuyu Okuyanlar: 2 Ziyaretçi