Rengi sabit olarak tanımlarken

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Lord_Ares
Üye
Mesajlar: 1070
Kayıt: 15 Eki 2006 04:33
Konum: Çorlu

Rengi sabit olarak tanımlarken

Mesaj gönderen Lord_Ares »

Merhaba, colorpic programı ile ekrandaki bir nesnenin üzerine gelerek üzerindeki rengi aldım. Bana colorpic programının verdiği renk #F9FAFA
Delphi ile yazılmış bir uygulamada şöyle bir sabit kullanılmış.

Tarama_Rengi : TColor = $00FDFEFE;

Tarama rengi olarak verilen bu değer yerine Colorpic programından aldığım bu değeri #F9FAFA kullanmak istiyorum. Bunun dönüşümü nasıl yapılır nasıl yazmalıyım. Aldığım bu renk ile yazdığım aynı mı nasıl kontrol edeceğim. Bana bu şekilde #F9FAFA verilen bir değeri buna nasıl çeviririm $00FDFEFE ikiside hexedecimal sanırm ama başktaki 00 rakamları beni biraz düşündürdü :))
Kullanıcı avatarı
brs
Üye
Mesajlar: 626
Kayıt: 04 Eki 2012 03:52

Re: Rengi sabit olarak tanımlarken

Mesaj gönderen brs »

Selam işinize yarasa Font.Color := RGB(0, 100, 0); bunu kullanabilirsiniz ve ayrıca http://s3.dosya.tc/server31/EjPJQg/Renkkodlar_.rar.html renk kodlarını buradan indirebilirsiniz

Not: renk kodlarının olduğu linki indirirken kullanmışım olduğum gibi anti virus "avast" programı siliyor içiniz rahat olsun herhangi bir şey yok yaklaşık 5 yıldır bu excel yararlanıyorum...
İşi bilen yardım eder, az bilen akıl verir, bilmeyen eleştirir, yapamayan ise çamur atar...
Lord_Ares
Üye
Mesajlar: 1070
Kayıt: 15 Eki 2006 04:33
Konum: Çorlu

Re: Rengi sabit olarak tanımlarken

Mesaj gönderen Lord_Ares »

cevap için teşekkürler arkadaşım, elimde bir resim var bu resimdeki belli bir noktadaki rengi alıp programıma vermem gerekiyor. O yüzden colorpic ile aldığım o değeri yukarıdaki verdiğim şekle çevirmem gerekiyor.
Lord_Ares
Üye
Mesajlar: 1070
Kayıt: 15 Eki 2006 04:33
Konum: Çorlu

Re: Rengi sabit olarak tanımlarken

Mesaj gönderen Lord_Ares »

SimaWB ilgin için teşekkürler. Vermiş olduğun örnekleri inceledim kafama takılan kısım şu oldu elimdeki bir kod parçasında şöyle bir renk tanımlanmış $00FDFEFE oysa benim programdan aldığım renk kodu #F9FAFA delphide bu kodu tanımlarken başına ŞOO mı eklemeliyim
hexedecimal renk tanımlarken yoksa aldığım bu rengi #F9FAFA direk şöyle tanımlamam doğrumu $F9FAFA
Kullanıcı avatarı
SimaWB
Üye
Mesajlar: 1316
Kayıt: 07 May 2009 10:42
Konum: İstanbul
İletişim:

Re: Rengi sabit olarak tanımlarken

Mesaj gönderen SimaWB »

Aslında verdiğim linklerde bu anlatılıyor...
Örneğin daha önce linkini verdiğim bu sayfada örnek olarak #003366 rengini Delphi'deki TColor'a çevirmiş. Sanırım senin aradığın tam da bu.
There's no place like 127.0.0.1
thelvaci
Kıdemli Üye
Mesajlar: 770
Kayıt: 11 Tem 2010 07:17
Konum: Istanbul
İletişim:

Re: Rengi sabit olarak tanımlarken

Mesaj gönderen thelvaci »

Veli bey'in verdiği örneklerden de anlaşılacağı üzere; aslında doğada tüm renkler Kırmızı, Yeşil ve Mavi ile temsil edilebilir. Bilgisayar ortamında bu RGB(Red, Green, Blue) yada daha ziyade grafik işleri ile uğraşanlar için CMYK(Cyan, Magenta, Yellow, Key) olarak ifade edilir. Buna bir de A-Alpha(saydamlık) seviyesi eklendiğinde; genelde renkler ARGB olarak ifadelendirilir. Bu durumda, bir renk 32 bit ile ifade edilebilir yani 4 byte. İlk byte A(Alpha), ikinci byte R(Red), üçüncü byte G(Green) ve son byte'da B(Blue) anlamına gelir.

Bir byte'lık verinin alabileceği maximum değer 255'dir ve bunun hexadecimal(16'lık sayı tabanı) notasyonu FF ile temsil edilir. Bir sayı'nın önüne $ getirildiğinde saynın Delphi'de hex olduğu kabul edilir. $FF = 255 değerine tekabül eder. Her hexadecimal sayının bir basamağı minimum 4 bit ile temsil edilir.(F'nin değerinin 15 olmasından ötürü. 1111 binary sayısı decimal 15'e hex F ye denk gelir).

Bu durumda #F9FAFA Delphi'de; $00F9FAFA biçiminde temsil edilebilir. 00: Alpha'yı, F9:Red'i, FA:Green'i, FA:Blue'yu temsil etmiş olacaktır.

#F9FAFA yada Delphi'cesi olan $00F9FAFA hex sayısının binary karşılığı bu durumda;
0000 0000 1111 1001 1111 1010 1111 1010 = Toplam uzunluk 32 bit.
0 0 F 9 F A F A

Edit: Bu arada söylemeyi unuttuğum bir şeyi de eklemem lazım. Bazı durumlarda; renk kodları sıralaması RGB değil tam tersi BGR biçiminde olabilir. Bunu test etmek için bir bitmap dosyanın içinden ScanLine yada ona benzer metodlar ile okuma yapabilirsiniz. Tabii durum; resim dosyaları olunca biraz daha farklılık arz edebilir, kimi resim formatı alpha desteklemez, kimisi destekler. Kimisi verileri RGB notasyonunda tutar kimisi de BGR. Bunlara dikkat ettiğiniz sürece bir sıkıntı yaşamazsınız.
xxxjedixxx
Üye
Mesajlar: 216
Kayıt: 10 Ara 2013 03:50

Re: Rengi sabit olarak tanımlarken

Mesaj gönderen xxxjedixxx »

Tuğrul beyin söylediklerine ek ve düzeltme olarak;
Renk örneği (F9FAFA) bir birine yakın sayılardan oluştuğu için anlaması zor olabilir ve ayrıca herhangi bir nesne üzerinde görünen renkten de farkı anlamak zor olacaktır. #F9FAFA koduyla verilen renk ile sıralaması değiştirilmeden HEX'miş gibi yazılan $F9FAFA rengi neredeyse aynı görünümdedir. Ama bu örnek bizi yanıltmaktadır.

Renk kodu "#RRGGBB" nın Delphi'deki karşılığı $RRGGBB olamaz. Aşağıdaki kod RRGGBB tipindeki renk kodunu RGB fonksiyonu ile Integer sayıya çevirmektedir. Son olarak sonucu HEX olarak göstermek için dönüştürme yapmaktadır. Eğer kodu denerseniz, sonucun Tuğrul beyin de sonradan ilave yaptığı gibi BGR olarak değiştiğini göreceksiniz. Yani F9FAFA'nın HEX karşılığı $FAFAF9 olacaktır.
Örneği değiştirirsek; renk kodu F9FA01 olsaydı, Hex karşılığı $01FAF9 olacaktı.

Kod: Tümünü seç

var Renk: string;
    Col: TColor;
    R, G, B: Byte;
begin
  Renk := '#F9FA01'; //Renk := '#F9FAFA';
  R := StrtoInt('$' + Copy(Renk, 2, 2)); //hex -> integer
  G := StrtoInt('$' + Copy(Renk, 4, 2));
  B := StrtoInt('$' + Copy(Renk, 6, 2));
  Col := RGB(R, G, B);
  Edit1.Text := Inttohex(Col, 6);
end;
Lord_Ares
Üye
Mesajlar: 1070
Kayıt: 15 Eki 2006 04:33
Konum: Çorlu

Re: Rengi sabit olarak tanımlarken

Mesaj gönderen Lord_Ares »

Arkadaşlar hepinize çok teşekkür ediyorum. Öğrenmek istediğim tamda buydu. Birşeyi yaparken hep neden , niçin sorusunu sormak ve neden böyle yaptığımı öğrenmek bana en doğru yol geliyor.Kopyala yapıştır şeklindeki öğrenimleri doğru bulmuyorum. Ve bu konu hakkındaki anlatımlarınız işte bu sorulara verilebilecek harika cevaplar olmuş. Sayenizde birşeyi doğru olarak öğrenmiş oldum. İlginiz ve emeğiniz çok
Fikir olarak ,Tuğrul bey, Simawb ve xxxjedixxx arkadaşlarımın cevablarındaki bilgilerin, forumda makalaler kısmında olması güzel olurdu. İleride belki benim gibi arkadaşlara ışık tutacak bir cevap.
teşekkürler.
Saygılarımla
Cevapla