Undo redo nasıl yaptırılır? (Anormal şekilde)

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Sedat Atif
Üye
Mesajlar: 80
Kayıt: 18 Şub 2004 08:12
Konum: Fâni bir yerden
İletişim:

Undo redo nasıl yaptırılır? (Anormal şekilde)

Mesaj gönderen Sedat Atif »

Merhaba.

Undo ve redo işlemleri nasıl yapılır? Kendinden undo özelliği olan bileşenlerden bahsetmiyorum. Mesela Photoshop veya Flash yapılan işlemlerin kayıtlarını nasıl tutuyor ve nasıl undo-redo yapıyor? Mesela bir resmin yerini, boyutunu değiştiriyor, efekt veriyorsunuz. Bunları nasıl geri alıyor?

Kısacası bu işin mantığı nedir?

Teşekkürler.
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

Selam...

- Photoshop'u incelerseniz bu tip programlarda birer History list bulunuyor... Yani bir resmin ilk halini bir yerde tutuyor ve sizin yaptığınız her değişikliği hem bu History List'e kaydediyor hem de resmi modifiye ediyor... Siz undo dedikçe bir geri adım atıp, baştan önceki adıma kadar olanları işlem yapıyor... Yani dilerseniz bi history listte yapılanları başka bir resme de uygulama şansınız oluyor ki benzer alpha blend vs. işlemleri bir tuşla yapabiliyorsunuz...

- Şimdi bu çerçevede sizin yapılabilecek her işlemin kaydını tutacak bir veritabanı veya hafızada array (dizi) tipindeki stringlist, memo, listbox vs. bir yere ihtiyacınız var...

- Buradan yola çıkarak istediklerinizi yapabilirsiniz... Takıldığınız yer olursa buradan tekrar sorun... Vakit buldukça yardımcı olunacaktır...
Resim
Resim ....Resim
Sedat Atif
Üye
Mesajlar: 80
Kayıt: 18 Şub 2004 08:12
Konum: Fâni bir yerden
İletişim:

Mesaj gönderen Sedat Atif »

Photoshop'u incelerseniz bu tip programlarda birer History list bulunuyor... Yani bir resmin ilk halini bir yerde tutuyor ve sizin yaptığınız her değişikliği hem bu History List'e kaydediyor hem de resmi modifiye ediyor... Siz undo dedikçe bir geri adım atıp, baştan önceki adıma kadar olanları işlem yapıyor... Yani dilerseniz bi history listte yapılanları başka bir resme de uygulama şansınız oluyor ki benzer alpha blend vs. işlemleri bir tuşla yapabiliyorsunuz...
Bunu biliyorum teşekkürler, zaten onu örnek vermeye çalıştım. Ancak, mesela her efekt değişiminde resmin farklı bir kopyasını mı kaydedeceğim? Bu pek mantıklı gelmedi de bana.

Ya da diyelim ki resmin resize edilmesi işlemini undo-redo yapmak istiyorum. Mesela 800*600 boyuttan 500*500 e indirilmiş olsun. Yapılan işlemlerin kaydı şöyle mi olmalı mantıken:

boyutdegistir(800*600,500*500)

Sonra undo yaparken bu adıma gelince 500*500 den 800*600 e çıkarsın boyutu.

Ama olmaz ki. Küçük bir resmi büyütürsek kötü gözükür. O zaman bu resmin orjinali yine bir yerde saklanmalı.


Daha başka bir örnek deneyelim. Mesela bir listboxdaki müşteri isimlerinin yerini değiştiriyoruz.

Liste şöyle:

Ahmet
Ali
Fatih
Mustafa

Diyelim ki kullanıcı "Mustafa" maddesinin sırasını değiştirdi, listede 2. yaptı.

O zaman mesela şöyle bir işlem kaydı mı tutacağım:

degistir(4,2)

Yani 4. maddeyi 2 ye aldığımızı belirten bir kayıt tutarız. Hatta daha da ileri gidelim, ikinci bir işlem olarak da 1. maddeyi 3 e alalım.

Yani listemiz bu halden

Ahmet
Mustafa
Ali
Fatih

bu hale gelsin:

Mustafa
Ali
Ahmet
Fatih

O zaman yapılan işlemler kaydımız da şöyle gözüküyor olmalı:

degistir(4,2)
degistir(1,3)

Bu işlemlerden sonra ilk "undo" işleminde programımız son kayda bakıp onu yorumlamalı ve 3 ü 1 e almalı. Sonraki undo da ise 2 yi 4 e.

Abartalım biraz, listeden silinen şeyler için de undo yapalım.

O zaman da silinen maddenin içeriğinin kaydını tutmamız gerekecek galiba.

Diyelim ki listenin son halinden 3. maddeyi yani "Ahmet" i sildik.

Bu durumda onun kaçıncı madde olduğunu da yazmalıyız. Yani yapılan işlemler listemize şu satır eklenecek:

Sil(3,"Ahmet")

Undo yaptığımızda "Ahmet" isimli bir madde 3. sıraya eklenmeli.

Sesli düşünüyorum galiba. Neyse, bir listbox da işlem yapmak daha kolay gözüküyor, ama bir resime verilen efektleri geri alma konusunda şüphelerim var.
Kullanıcı avatarı
mussimsek
Admin
Mesajlar: 7603
Kayıt: 10 Haz 2003 12:26
Konum: İstanbul
İletişim:

Mesaj gönderen mussimsek »

Merhaba Sedat,

Muharrem bey'in söylediği teknik biraz daha farklı. Başta resim var, bunun üzerine 5 işlem yaptın, 5. cisi geri alırsan ilk 4 işlemi orjinal resim üzerine tekrar işliyor. Yani atıyorum Resme

1. büyüttün
2. renk ksayısını düşürdün
3. emboss efekti uyguladın
4. köşeleri kestin
5. tekrar boyutlandırdın

diyelim. bu 5. işlemi geri almak istersen 5. adımda oluşan resmi boyutlandırmıyor, orjinal resme ilk 4 adımı sırasıyla tekrar işliyor.

Kusura bakma çalışma mantığını ben bilmiyorum ama okuduğumdan böyle anladım.

kolay gelsin.
Kullanıcı avatarı
Opt2000
Üye
Mesajlar: 216
Kayıt: 09 Tem 2003 10:04

Photoshop'un çalışma mantığı

Mesaj gönderen Opt2000 »

Merhaba,
Photoshop'un History'sinin çalışma mantığı, yapılan her işlemin diskte tutulması ve gerektiğinde yeniden çağırılması üzerine dayanıyor. Bu yüzden, özellikle büyük resimlerle çalışırken diskinizdeki temp dosyası inanılmaz derecede şişiyor. Undo redo işlemini bu kadar hızlı yapmasının nedeni de (sonuçta diskten okuyor, mantık yavaş olmasını gerektiriyor) çok iyi kodlanmış hashing fonksiyonları olsa gerek.
Sedat Atif
Üye
Mesajlar: 80
Kayıt: 18 Şub 2004 08:12
Konum: Fâni bir yerden
İletişim:

Mesaj gönderen Sedat Atif »

Admin yazdı:Merhaba Sedat,

Muharrem bey'in söylediği teknik biraz daha farklı. Başta resim var, bunun üzerine 5 işlem yaptın, 5. cisi geri alırsan ilk 4 işlemi orjinal resim üzerine tekrar işliyor. Yani atıyorum Resme

1. büyüttün
2. renk ksayısını düşürdün
3. emboss efekti uyguladın
4. köşeleri kestin
5. tekrar boyutlandırdın

diyelim. bu 5. işlemi geri almak istersen 5. adımda oluşan resmi boyutlandırmıyor, orjinal resme ilk 4 adımı sırasıyla tekrar işliyor.

Kusura bakma çalışma mantığını ben bilmiyorum ama okuduğumdan böyle anladım.

kolay gelsin.
Muharrem beyin mesajındaki o noktayı atlamışım galiba. Teşekkürler. Diğer işlemleri baştan yapması çok uzun sürer gibi geliyor bana. Bazı efektler kendi başlarına 30 sn sürüyor zaten.

Kusur mu? Ne kusuru? :)
Merhaba,
Photoshop'un History'sinin çalışma mantığı, yapılan her işlemin diskte tutulması ve gerektiğinde yeniden çağırılması üzerine dayanıyor. Bu yüzden, özellikle büyük resimlerle çalışırken diskinizdeki temp dosyası inanılmaz derecede şişiyor. Undo redo işlemini bu kadar hızlı yapmasının nedeni de (sonuçta diskten okuyor, mantık yavaş olmasını gerektiriyor) çok iyi kodlanmış hashing fonksiyonları olsa gerek.
Hmmm... Teşekkürler... Hashing fonksiyonları nedir?
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

Selam... İşler yüzünden cevap için biraz geciktim... :oops:

- Hashing işlemleri, bahsettiğiniz şekilde yavaş olan işlemlere hız kazanmasını sağlamak için ara yedekler / kurgu'ları içerir...

- Yani siz 10 işlemde bir resmin o adımdaki halinin yedeğini aldırırsanız, 10 adımlı hızlandırma sağlamış olursunuz... 5 işlemde bir resmin o adımdaki yedeğini alırsanız 5 adımlı hızlandırmış olursunuz... Sistemin hızına ve tipine göre bu adımları belirlersiniz...

:arrow: Optimum performans; sizin kullanıcıya sunacağınız işlemci hızı - harddisk temp alan büyüklüğü - adım sayısı üçgeninin kurgusunda yatıyor... :idea: Gerekli etüdü yapar buna göre configuration belirlersiniz...

- Ek : Uzun zaman alan filtre/fonksiyon'larda bu adımlarda ara adımlar konabilir... Sadece crop işlemi için zaman almayacağından bu adımlar atlanabilir vs. şeklinde bir etüdden bahsediyorum...
Resim
Resim ....Resim
Sedat Atif
Üye
Mesajlar: 80
Kayıt: 18 Şub 2004 08:12
Konum: Fâni bir yerden
İletişim:

Mesaj gönderen Sedat Atif »

Hmmm... Teşekkür ederim. Biraz deneme yapayım bakalım.
Cevapla