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.
Undo redo nasıl yaptırılır? (Anormal şekilde)
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
-
- Üye
- Mesajlar: 80
- Kayıt: 18 Şub 2004 08:12
- Konum: Fâni bir yerden
- İletişim:
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...
- 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...
-
- Üye
- Mesajlar: 80
- Kayıt: 18 Şub 2004 08:12
- Konum: Fâni bir yerden
- İletişim:
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.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...
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.
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 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.
Photoshop'un çalışma mantığı
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.
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.
-
- Üye
- Mesajlar: 80
- Kayıt: 18 Şub 2004 08:12
- Konum: Fâni bir yerden
- İletişim:
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.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.
Kusur mu? Ne kusuru?

Hmmm... Teşekkürler... Hashing fonksiyonları nedir?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.
Selam... İşler yüzünden cevap için biraz geciktim...
- 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...
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...
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...

- 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...


- 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...
-
- Üye
- Mesajlar: 80
- Kayıt: 18 Şub 2004 08:12
- Konum: Fâni bir yerden
- İletişim: