Ö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,
Timage Jpeg boyutlar ile işlem yapmak
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
Re: Timage Jpeg boyutlar ile işlem yapmak
viewtopic.php?f=2&t=27300#p152433 linkindeki örneği incelerseniz yardımcı alacağını değerlendiriyorum.
başarılar.
başarılar.
Re: Timage Jpeg boyutlar ile işlem yapmak
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....
Dikkatli okursanız tam olarak aradaki inceliği anlayabilirsiniz....
Re: Timage Jpeg boyutlar ile işlem yapmak
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.
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.
Re: Timage Jpeg boyutlar ile işlem yapmak
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...
"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...
Re: Timage Jpeg boyutlar ile işlem yapmak
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.
kodlardaki modifikasyon sana bahsettiğim şekildedir. Eski kodlar // ile remark altına alınmış, xRef ve yRef olarak yeni referans eklenmiştir.
Başarılar
Ekte istediğin şekilde modifiye edilmiş hali var. Muhtemelen istediğin budur. Ama değilse tekrar yaz.
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;
Re: Timage Jpeg boyutlar ile işlem yapmak
İ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.
Son açıklamanızdan sonra sorun hallolmuştu ama başka sorun yaşayan arkadaşlara kaynak olur.
Tekrardan teşekkür ederim.