Timage Jpeg boyutlar ile işlem yapmak

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
adasis
Üye
Mesajlar: 17
Kayıt: 20 Eki 2010 06:53

Timage Jpeg boyutlar ile işlem yapmak

Mesaj gönderen adasis »

Öncelikle ilgilenen arkadaşlara şimdiden teşekkür ederim.

Problemim şu;
Timagede yüklü bir jpeg var, resmin boyutu 1600x896 ve resmin üzerinde iki ayrı yerde nokta var, benim timage nesnem 752x416 boyutlarında ve center=true durumda, bu halde iken resmin üzerinde iki noktanın koordinatlarını belirliyorum, fakat timageyi yine center=true şekilde iken dblclick ile 1024x576 ya ayarlıyorum ,daha önceden belirlediğim koordinatların da aynı oranda yer değiştirmesini istiyorum,
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: Timage Jpeg boyutlar ile işlem yapmak

Mesaj gönderen mrmarman »

viewtopic.php?f=2&t=27300#p152433 linkindeki örneği incelerseniz yardımcı alacağını değerlendiriyorum.

başarılar.
Resim
Resim ....Resim
adasis
Üye
Mesajlar: 17
Kayıt: 20 Eki 2010 06:53

Re: Timage Jpeg boyutlar ile işlem yapmak

Mesaj gönderen adasis »

Linkteki örneği daha önce incelemiştim, fakat yapmak istdiğim şey ordaki olayla aynı değil, orda x=0 y=0 olarak zaten belli ama benim yapmak istediğim, "resmin boyutu 1600x896 ve resmin üzerinde iki ayrı yerde nokta var, benim timage nesnem 752x416 boyutlarında ve center=true durumda,timageyi yine center=true şekilde iken dblclick ile 1024x576 ya ayarlıyorum ,daha önceden belirlediğim koordinatların da aynı oranda yer değiştirmesini istiyorum".

Dikkatli okursanız tam olarak aradaki inceliği anlayabilirsiniz....
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: Timage Jpeg boyutlar ile işlem yapmak

Mesaj gönderen mrmarman »

Buraya mesaj yazdığınızda bire bir sizin istediğiniz sonucu değil, değerlendirebileceğiniz bir çıkış noktası bulmanız için kılavuz cevabı beklemelisiniz. Bu durum kimsenin yazdığınız sorunun doğru / yanlış / eksik okuduğu anlamına gelmez. Bunu peşinen söyleyim çünkü "Dikkatli okursanız tam olarak aradaki inceliği anlayabilirsiniz...." şeklindeki bir cevap hiç hoş bir cevap değil. Burada yardımcı olmaya çalışıp ardından da böyle bir cevabı hak etmiyorum.

Sorunuza gelince, referans noktası dediğiniz yer, 0,0 olması center false olduğu durumda geçerli olabilir, siz center true dediğinizde bu 0,0 noktasının nereye kaydığını hesaplamak hiç de zor değil. Bunu bilemediğinizi, bu hesabı yapmakta zorlandığınızı veya yapamayacağınızı söylemeniz yeterli idi. Buna karşılık cevabım, orjinal resmin Width değeri 1600 olsun, Image nesnesinin (tekrar ayarladıktan sonraki değeri) width değeri 1024olsun. Soldaki referans noktası hesaplamak için RefNoX := (1600 - 1024) div 2; şeklinde hesaplanır. Aynı şekilde Height değeri de farkının yarısı Y apsisindeki referans noktasıdır. Eğer hesapladığınız nokta bu değerler içerisinde ise referans kadar çıkartarak 0'a yanaştırarak gösterirsiniz veya farkı negatif değer verirse ekranda görüntülemezsiniz çünkü sizin ekranın sınırları dışında kalmıştır.

Başarılar.
Resim
Resim ....Resim
adasis
Üye
Mesajlar: 17
Kayıt: 20 Eki 2010 06:53

Re: Timage Jpeg boyutlar ile işlem yapmak

Mesaj gönderen adasis »

Sayın mrmarman;

"Dikkatli okursanız tam olarak aradaki inceliği anlayabilirsiniz...." yanlış anlaşıldığı için özür dilerim, kimseyi aşağılamak içim yazmadım, sizin verdiğiniz örnek ile benim sorunum arasındaki inceliği anlatmak için yazmıştım. Sizde bilirsiniz ki bir insanın yazarak derdini tam olarak anlatabilmesi biraz zor, yazarken bu tarz incelikleri atlayabiliyoruz.

Ayrıca referans noktasını hesaplayamadığım için böyle bir soru sorma ihtiyacı duydum, tekrardan hesaplayamıyorum diye yazmam gerektiğinide bilmiyordum.

Tam olarak beceremeyipte yapmak isteğim şeyde buydu, ilk mesajımdada teşekkür etmiştim, ama yanlış anlaşıldığım için tekrardan özür diliyor ve teşekkür ediyorum...
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: Timage Jpeg boyutlar ile işlem yapmak

Mesaj gönderen mrmarman »

Rica ederim. Durumun açıklığa kavuşmasına sevindim.

Ekte istediğin şekilde modifiye edilmiş hali var. Muhtemelen istediğin budur. Ama değilse tekrar yaz.
HaritaKoordinat.rar
Harita Koordinatının Büyüklüğe Göre Statik Kalması
(63.07 KiB) 110 kere indirildi
kodlardaki modifikasyon sana bahsettiğim şekildedir. Eski kodlar // ile remark altına alınmış, xRef ve yRef olarak yeni referans eklenmiştir.

Kod: Tümünü seç

Var
  xBitmap : TBitmap;

procedure TForm1.btTemizleClick(Sender: TObject);
begin
  with Image1.Canvas do begin
    Image1.Picture.Graphic := xBitmap;
  end;
end;

procedure TForm1.btDoldurClick(Sender: TObject);
Var
  i      : Integer;
  x, y   : Integer;
  Satir  : String;
  x1, y1 : Integer;
  xRef, yRef : Integer;
begin
  for i := 0 to ListBox1.Count - 1 do begin
    Satir := ListBox1.Items[i];
    x :=  StrToInt( Copy(Satir, 1, Pos(',', Satir) -1) );
    System.Delete(Satir, 1, Pos(',', Satir));
    y :=  StrToInt( Copy(Satir, 1, Pos('.', Satir) -1) );

  xRef := (Image1.Width  - Image1.Picture.Bitmap.Width ) div 2;
  yRef := (Image1.Height - Image1.Picture.Bitmap.Height) div 2;

  x1   := xRef + X;
  y1   := yRef + Y;
    //x1 := Trunc( X * (Image1.Width  / Image1.Picture.Bitmap.Width ) );
    //y1 := Trunc( Y * (Image1.Height / Image1.Picture.Bitmap.Height) );

    with PaintBox1.Canvas do begin
      Brush.Style := bsSolid;
      Brush.Color := clYellow;
      Pen.Color   := clBlue;
      Pen.Width   := 3;
      Rectangle(x1-5, y1-5, x1+5, y1+5);
    end;
  end;
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  ListBox1.Items.SaveToFile( ChangeFileExt(Application.Exename, '_Koordinat.TXT') );
  xBitmap.Free;
end;

procedure TForm1.FormResize(Sender: TObject);
begin
  btTemizle.Click;
  Application.ProcessMessages;
  btDoldur.Click;
end;

procedure TForm1.FormShow(Sender: TObject);
begin
  xBitmap := TBitmap.Create;
  xBitmap.Assign( Image1.Picture.Bitmap );
  If FileExists( ChangeFileExt(Application.Exename, '_Koordinat.TXT') )
    then ListBox1.Items.LoadFromFile( ChangeFileExt(Application.Exename, '_Koordinat.TXT') );
end;

procedure TForm1.ListBox1DblClick(Sender: TObject);
begin
  if ListBox1.ItemIndex >= 0 then ListBox1.Items.Delete(ListBox1.ItemIndex);
  FormResize(Nil);
end;

procedure TForm1.PaintBox1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
Var
  x1, y1 : Integer;
  xRef, yRef : Integer;
begin
  xRef := (Image1.Width  - Image1.Picture.Bitmap.Width ) div 2;
  yRef := (Image1.Height - Image1.Picture.Bitmap.Height) div 2;

  x1   := X-xRef;
  y1   := Y-yRef;

  //x1 := Trunc( X / (Image1.Width  / Image1.Picture.Bitmap.Width ) );
  //y1 := Trunc( Y / (Image1.Height / Image1.Picture.Bitmap.Height) );
  Form1.Caption := Format('X: %d, Y:%d', [x1, y1]);

end;

procedure TForm1.PaintBox1MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
Var
  x1, y1 : Integer;
  xRef, yRef : Integer;
begin
  xRef := (Image1.Width  - Image1.Picture.Bitmap.Width ) div 2;
  yRef := (Image1.Height - Image1.Picture.Bitmap.Height) div 2;

  x1   := X-xRef;
  y1   := Y-yRef;
  //x1 := Trunc( X / (Image1.Width  / Image1.Picture.Bitmap.Width ) );
  //y1 := Trunc( Y / (Image1.Height / Image1.Picture.Bitmap.Height) );
  ListBox1.Items.Add( Format('%d,%d.', [ X1, Y1]) );
  FormResize(Nil);
end;
Başarılar
Resim
Resim ....Resim
adasis
Üye
Mesajlar: 17
Kayıt: 20 Eki 2010 06:53

Re: Timage Jpeg boyutlar ile işlem yapmak

Mesaj gönderen adasis »

İlginiz için teşükkerler;
Son açıklamanızdan sonra sorun hallolmuştu ama başka sorun yaşayan arkadaşlara kaynak olur.

Tekrardan teşekkür ederim.
Cevapla