Delphi Can
Resim içerisindeki Herhangi Bir Renge Zemin Resmi Verme (2 renk verme (Pattern)) - Baskı Önizleme

+- Delphi Can (http://www.delphican.com)
+-- Forum: Delphi (http://www.delphican.com/forumdisplay.php?fid=3)
+--- Forum: Genel Programlama (http://www.delphican.com/forumdisplay.php?fid=6)
+--- Konu Başlığı: Resim içerisindeki Herhangi Bir Renge Zemin Resmi Verme (2 renk verme (Pattern)) (/showthread.php?tid=3551)

Sayfalar: 1 2


Resim içerisindeki Herhangi Bir Renge Zemin Resmi Verme (2 renk verme (Pattern)) - pro_imaj - 15-04-2019

Merhaba,

Elimizde bir resim olduğunu düşünürsek; Örneğin resimdeki sarı renklerin tümünü beyaz yapabiliyoruz. Sarı olan tüm renkleri Mavi+Beyaz olarak (pattern) nasıl işleyebiliriz bu konuda daha önce uğraşan varsa nasıl bir yol izlemeliyiz.

*Yani resim içerisindeki tüm sarı renkleri , zemin resmi olarak seçtiğimiz resimle nasıl döşeye biliriz.

Teşekkürler.


Resmin bir pikseline 2 renk verme (Pattern) - SimaWB - 15-04-2019

Soruyu tam anlayamadım ama mavi+beyaz sonucunda siz yine 1 renk elde etmiş olmayacak mısınız?


Cvp: Resmin bir pikseline 2 renk verme (Pattern) - pro_imaj - 15-04-2019

(15-04-2019, Saat: 12:47)SimaWB Adlı Kullanıcıdan Alıntı: Soruyu tam anlayamadım ama mavi+beyaz sonucunda siz yine 1 renk elde etmiş olmayacak mısınız?

Merhaba,

Konu başlığını ve içeriğini değiştirdim. 

İlgili resim içerisindeki sarı renklerin tümünü seçtiğim bir resim ile döşemek istiyorum. Seçili rengin olduğu her yeri seçtiğim zemin resmi ile döşemek.

Teşekkürler.


Resim içerisindeki Herhangi Bir Renge Zemin Resmi Verme (2 renk verme (Pattern)) - esistem - 15-04-2019

Ana resmi ele alıp, tek tek pikselleri okuyup sarı renkli piksellerin top ve left ine göre pattern resimden ilgili pikselleri okuyup ana resimdeki piksellerin yerine basabilirsiniz.


Resim içerisindeki Herhangi Bir Renge Zemin Resmi Verme (2 renk verme (Pattern)) - engerex - 15-04-2019

Eğer ilgili resim içerisindeki belirttiğiniz renk kodu sabitse bu rengi saydam tanımlayıp zemin resmi dediğiniz resmin üzerine uygulamayı denediniz mi?


Cvp: Resim içerisindeki Herhangi Bir Renge Zemin Resmi Verme (2 renk verme (Pattern)) - pro_imaj - 15-04-2019

(15-04-2019, Saat: 15:46)engerex Adlı Kullanıcıdan Alıntı: Eğer ilgili resim içerisindeki belirttiğiniz renk kodu sabitse bu rengi saydam tanımlayıp zemin resmi dediğiniz resmin üzerine uygulamayı denediniz mi?

Renk kodları sabit evet, rengi renk ile değiştirmeyi anlayabiliyorum burada sorun yok, rengi resim ile değiştirmenin nasıl olacağını anlayamıyorum, Sarı renk gördüğün her yere şu resmi döşe şeklinde.


Resim içerisindeki Herhangi Bir Renge Zemin Resmi Verme (2 renk verme (Pattern)) - uparlayan - 15-04-2019

http://docwiki.embarcadero.com/CodeExamples/Rio/en/Pixels_(Delphi)


Resim içerisindeki Herhangi Bir Renge Zemin Resmi Verme (2 renk verme (Pattern)) - esistem - 15-04-2019

Rengi resim ile değiştirmeyeceksiniz, resimde sarı görünen pikselin rengini değiştirmek istediğiniz resimdeki aynı pikselde bulunan renk ile değiştireceksiniz.

bi nevi resimleri üst üste bindirmiş olacaksınız.

şöyle bir kod yazdım bakın bi deneyin.

formun üstüne 2 tane aynı boyutta fakat farklı resimler olan imaj koyun, bmp olsun mümkünse.

  type
 PRGBTripleArray = ^TRGBTripleArray;
TRGBTripleArray = array[0..32765] of TRGBTriple;
----------------------------------------------------------------

procedure TForm1.SpeedButton1Click(Sender: TObject);
var
bmp : TBitmap;
p: array of PRGBTripleArray;
trenk:tcolor;
x,y:integer;
begin
bmp := TBitmap.Create; // bitmap olustur
bmp.Width := Image1.Width; // width ayarla
bmp.Height := Image1.Height; // height ayarla
bmp:=Image1.Picture.Bitmap; // resmi bitmap e yukle


Setlength(p,bmp.Height); // p nin boyutunu ayarla (bitmap in satır sayısı kadar)

for x:=0 to bmp.Height-1 do // her satır pikselleri taramak icin donguye sok
  begin // x dongu
     p[x]:=bmp.ScanLine[x]; // ilgili satırı tarayıp p ye yukle

for y:=0 to bmp.Width do begin // bitmap uzunlugu kadar donguye sok
if (y<bmp.Width-2) Then Begin  // sondaki 2 pikseli atıyorum sona tek çizgi atmasın diye

if (p[x][y].rgbtRed>=250)
  then begin
  Image1.Canvas.Pixels[y,x]:=Image2.Canvas.Pixels[y,x];
       end;
                        End;
                         end;  // bitmap uzunlugu kadar donguye sok
  end;  // x dongu

end;


procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
Caption:=inttostr(GetRValue(Image1.Canvas.Pixels[x,y]))+' - '+inttostr(GetGValue(Image1.Canvas.Pixels[x,y]))+' - '+inttostr(GetBValue(Image1.Canvas.Pixels[x,y]));
end;


image1 in mouse move olayında mouse ile üzerinde gezerken hangi pikselde ise o pikselin rgb değerlerini alın. sarı için R değeri 250 ve üstü dedim ben mesela, bmp ye image1 i yüklüyorum, ScanLine ile tarıyorum, her pikselin R değerine bakıp 250 ve üstü ise (sarıya benziyor ise yani) git image2 nin aynı x ve y deki renk değerini al image1 in üstüne bas diyorum. Böylece sarı rengin üstüne yavaş yavaş image2 yi basıyor.


Resim içerisindeki Herhangi Bir Renge Zemin Resmi Verme (2 renk verme (Pattern)) - engerex - 15-04-2019

Örnek bir resim ve zemin resmi var mı?


Cvp: Resim içerisindeki Herhangi Bir Renge Zemin Resmi Verme (2 renk verme (Pattern)) - pro_imaj - 15-04-2019

Merhaba,
Cevaplar için teşekkür ederim, yapmak istediğim. aşağıdaki gibi.

IQ1Exww.gif