bir öğrenci arkadasımın ödevine yardım ediyorum
işlemi şöyle anlatayım
bir zoom işlemi yapılacak fakat işlemde şöyle bir olay var
mesela
şöyle bir resim diyelim
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
gibi bir resim var diyelim
bu resim gördüğümüz gibi 4 X 4 pixellik bir resim her sayı bir pixel dersek
bu resmi zoom yaptıgımızda
resim 7 X 7 pixel olacak bu durumda
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
.....
diye giderse
burda ki 2 resimdeki
ilk bir kaç tane pixeli anlatırsam digerlerini siz anlarsınız mantık aynı zaten
şöyle açıklayım,,ü
2. resim | 1. resim
1. pixel | 1.pixel
2. pixel | (1.pixel+2.pixel)/2
3. pixel | 2. pixel
8. pixel | (1.pixel + 5.pixel)/2
9 pixel de ikinci resmin 2 ve 8 . pixellerin ortalaması olacak
mantık olarak aslında sorun yok
benim başaramadığım yer
1. resmin her pixelini okuyup ayrı bir ikinci resmi oluşturup onu yeni boyutlarıyla uygulamayı yapıp bir baska image nesnesinde göstermek istiyorum
fakat bu işlemlerde hep bilgi ytetersiliginden elimden birşey gelmiyor
bu akşam sabaha kadar mesajlarınızı beklicem
pixellerin renklerinin ortalamasını alıp digerine uygulamayı ogrenebilsem süper olucak bişi bulamadım
bulduklarımdan birşey ortaya cıkaramadım
zoom + bitmap create
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
zoom + bitmap create
Yardıma İhtiyacım var galiba TAM burda 

- fatihtolgaata
- Üye
- Mesajlar: 382
- Kayıt: 04 Mar 2004 09:46
- Konum: K.çekmece / İstanbul
- İletişim:
scanline ya da canvas.pixel yöntemini kullanarak istediğin işlemi yapabilirsin. Tavsiyem olan scanline işlemi daha hızlı ama daha karmaşık. http://www.efg2.com/Lab/ImageProcessing/Scanline.htm bu adresten scanline hakkında bilgi alabilirsin.
Ama hızlılık önemli değilse canvas'ın pixel özelliğini kullanabilirsin. image içindeki pixellere bu şekilde ulaşmak için
gibi kullanabilrisin. Bu sana TColor cinsinden bir değer verecek. Bu değer 32bitlik bir sayısal değerdir.
İster scanline kullan ister pixels özelliğini, sonuçta elinde pixelin TColor değeri var.
Ardından bu TColor değerini aldıktan sonra RGB değerlerini alabilmek için GetRValue, GetGValue, GetBValue fonksiyonlarını kullanabilirsin. Bu fonksiyonlar da 255'e kadar bir sayı değeri verecek sana.
Eğer mevcut Image nesnesinin bitmapinin pixelinde değişiklik yaparsan, hemen ardından Image nesnesini Repaint yapmayı unutma. Yoksa yaptığın değişiklikler gözükmez.
Eğer bu bitmapi işleyip başka bir image nesnesine atmak istiyorsan şunun gibi bir şey yapmalısın(Image nesnesinde Bmp olduğu varsayılmıştır):
Son olarak, pixellerin ortalamasını almakla R,G,B değerlerini mi ortalama alıyorsun onu anlamadım. Ama RGB ile işlem yapacaksan, rgb'den TColor'a geçmek için RGB() fonksiyonunu, TColor'dan RGB değerlerini almak için de yukarda bahsettiğim GetRValue gibi fonksiyonları kullanmalısın. Bu arada uses kısmında Graphics'i unutmamalısın.
vesselam.[/code]
Ama hızlılık önemli değilse canvas'ın pixel özelliğini kullanabilirsin. image içindeki pixellere bu şekilde ulaşmak için
Kod: Tümünü seç
Image1.Picture.Bitmap.Canvas.Pixels[x,y]
İster scanline kullan ister pixels özelliğini, sonuçta elinde pixelin TColor değeri var.
Ardından bu TColor değerini aldıktan sonra RGB değerlerini alabilmek için GetRValue, GetGValue, GetBValue fonksiyonlarını kullanabilirsin. Bu fonksiyonlar da 255'e kadar bir sayı değeri verecek sana.
Eğer mevcut Image nesnesinin bitmapinin pixelinde değişiklik yaparsan, hemen ardından Image nesnesini Repaint yapmayı unutma. Yoksa yaptığın değişiklikler gözükmez.
Eğer bu bitmapi işleyip başka bir image nesnesine atmak istiyorsan şunun gibi bir şey yapmalısın(Image nesnesinde Bmp olduğu varsayılmıştır):
Kod: Tümünü seç
var
TempBitmap: TBitmap; //Üzerinde işlem yapacağımız geçici bir TBitmap
begin
TempBitmap := TBitmap.Create;
try
//Image1'in bitmapini geçici bitmap'e atalım
TempBitmap.Assign(Image1.Picture.Bitmap);
//Burada TempBitmap üzerinde işlemlerinizi yaparsınız.
//TempBitmap.Canvas.Pixels[x,y] := RGB(200,255,200) gibi
//pixellere ulaşmak için iç içe iki for döngüsü gerekli
//Image2'ye yeni bitmapi atıyoruz.
Image2.Picture.Bitmap.Assign(TempBitmap);
Image2.Repaint;
finally
TempBitmap.FreeImage;
TempBitmap.Free;
end;
end;
vesselam.[/code]