zoom + bitmap create

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
samety81
Üye
Mesajlar: 84
Kayıt: 07 Nis 2006 03:53

zoom + bitmap create

Mesaj gönderen samety81 »

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
Yardıma İhtiyacım var galiba TAM burda :)
Kullanıcı avatarı
fatihtolgaata
Üye
Mesajlar: 382
Kayıt: 04 Mar 2004 09:46
Konum: K.çekmece / İstanbul
İletişim:

Mesaj gönderen fatihtolgaata »

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

Kod: Tümünü seç

Image1.Picture.Bitmap.Canvas.Pixels[x,y]
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):

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;
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]
Cevapla