PDA

Tam Sürümünü Görmek İçin : Rgb Renk Kodlaması


KamilORS
02/09/2006, 05:28
Merhaba Arkadaşlar Borland C++ Builder da Rgb renk kodlamasına göre olan bir rengi mesala RGB(0,0,0) 'ı #000000 Olarak Yani Html de Kullanılan renk koduna çevirebiliriz. Örneğin ben bir programcık hazırladım. Scrollbar yardımı ile rgb fonksyonu ile RGB(98,95,172) Rengini oluşturdum. Çevir Butonuna basınca bu rengi #....... Diye HTML de kullanılan renk koduna çevircek. Bunu Nasıl Yapabilirim ?


acehreli
02/09/2006, 06:51
Arka arkaya 4 tane sey yazacaksin: Once '#' karakterine ve 16 tabaninda (hexadecimal) olmak uzere 3 sayiyi.

Yazmak icin printf, sprintf gibi C islevlerini de kullanabilirsin; hexadecimal yazmak icin %x belirtecini kullanirlar.

Bu is icin C++'in giris cikis akimlarini da kullanabilirsin. Onun icin de std::hex belirtecini kullanabilirsin:

cout << std::hex << sayi;

gibi...

Ali

KamilORS
03/09/2006, 02:22
acehreli teşekkürler Fakat program Konsolda değil :( Grafik ortamında

KamilORS
03/09/2006, 02:24
tamam şimdi anladım. :) Kusura bakma biraz kafam ağrıyorda. Diyosinki (98,95,172) örenğini 9895172 şekline getir. sonrada bunu 16 lık sayı sisteminde yazdır ?.

acehreli
03/09/2006, 03:46
Sonunda 16'li sistemde yazdirmak dogru olmaz. Sayilari tek tek 16'li yazdirman gerekiyor. Ornegin (15,15,15)'in #0f0f0f olmasini istiyorsun. Ama 151515'i 16'liya cevirirsen [Windows'un hesap makinesiyle ceviriyorum... :) ] #24fdb oluyor; yani yanlis.

Belki de bu donusumu yapan bir islev vardir bile; hic bilmiyorum...

Bu arada, once soyledigim %x'in dogru olmadigini farkettim. 15'i 0f'e iki hane olacak sekilde ve bastaki haneyi gerekirse 0 yapacak sekilde donusturmek icin %02x kullanmak gerekiyor. Bir ornek:


#include <stdio.h>

int main()
{
// dizgi'yi kullanmaya gerek yok tabii ki. Ben sprintf'i de kullanmis
// olmak icin once dizgi'ye yazip sonra cikisa gonderdim.
char dizgi[1000];
sprintf(dizgi, "%02x", 15);

printf("%s\n", dizgi);

return 0;
}


C++ orneginde de std::setw kullanilabilir:


#include <iostream>
#include <iomanip>

int main()
{
std::cout << std::hex // 16'li
<< std::setw(2) // 2 hane olarak
<< std::setfill('0') // gerekirse 0 karakteriyle doldurarak
<< 15
<< '\n';
}


Tabii oyle yazinca cok kullanissiz gorunuyor... :D

Ali

shurzan
05/09/2006, 00:58
Selam KamilORS;
Senin Borland ile yapmak istediğini yanlış anlamadıysam,
ScrollBar dan dönen değerin Heximal karşılığını elde etmek ve böylece beğendiğin rengin hex değerini bir başka (HTML gibi) işlemde kullanmak istiyorsun.

Ali Hocam Sanırım arkadaş aşağıdaki gibi bir şey yapmak istiyor.

Borland C++ Builder compenent'leriden ScrollBar ile ilgili olan aynı sayfayı okumuşuz bu örnek uygulamayı seninde düşündüğün gibi bende, isteğime göre nasıl düzenleyebilirimi düşünmüştüm.
Bunu aşağıdaki resimde görüldüğü gibi kodlamıştım derlenmiş uygulamaya indirip bakabilirsin.

Aslında bu sorunun cevabı ilerleyen sayfalarda bulacakdın. Borland'ın VCL yerleşik "IntToHex()" fonksiyonunu kullanabilirsin.
Borland C++ builder de bir çok dönüşüm fonksiyonları var bazıları ise her zaman hatırlaman gereken fonksiyonlardır bu bölümü çalışırsan çok faydasını göreceğine eminim.

Örneğin;
ScrollBar'ın "OnScroll" olayında ScrollBar'ın pozisyonundaki dönen integer değeri bir int türündeki değişkene atar bunuda InToHex() fonksiyonunda kullanırsan IntToHex fonksiyonundan sana AnsiString türünden bir hex değerlere sahip string döndürür bunu ister Label iste Memo istersen Edit kontrolüne doğrudan atarak görüntüleyebilirsin. IntToHex(int a, int b) iki argüman alır birinci argüman(a) dönüşümü yapılacak değer ikincisi(b) elde edilecek hex değerinin basamak sayısı.

//Hex değerini Label kontrolünde göster

//önceki kodlar...
int ColorToHex = ScrollBar1->Position;
Label1->Caption = IntToHex(ColorToHex, 6);
Label1->Update();
//Sonraki kodlar


Kolaygelsin...

KamilORS
05/09/2006, 05:22
S.a shurzan;

Tam İstediğim Olayı Anlatmıssın Teşekkür ederim. Abi bişey Soracağım Borland C++ Builder Ömrü Bitti Deniliyor. Yani Artık 6. sürümden başka sürüm çıkmayacakmış 7 gibi. Bu doğrumu ?

KamilORS
05/09/2006, 05:24
Birde Abi Bunu böyle nasıl derledin. Yani InstalShard mıydı onun yardımı olmadan diğer bilgisayarlarda çalışmasını nasıl yaparız. Bu iki sorumada cevap yazarsan çok memnun olurum

Raiser
05/09/2006, 19:45
Belki işinize yarar diye yazayım, 3 byte'lık renk kodlamasını (html'de kullanılan) direkt integer olarak döndürmek için;


int RGB2Int(int kirmizi,int yesil, int mavi)
{
return (kirmizi << 16) | (yesil << 8) | mavi;
}


Bundan sonra isterseniz onaltılık tabanda dönüşüm yapıp string olarak da kullanabilirsiniz. Dediğiniz Borland'ın IntToHex() fonksiyonu da bu dönüşümü yapar sanırım. Ya da standart c kütüphanesinden;


char str[8];
sprintf(str,"#%x",RGB2Int(50,60,70));


şeklinde halledebilirsiniz.