با سلام به دوستان
من می خواهم هرجایی روی فرم که مختصاتش را بدهم رنگ پیکسل به صورت تفکیک شده RGBبه من داده شود از چه دستوری باید استفاده کنم باید بگم که دستور پیکسل یه عدد 8 رقم بر میگرداند
باتشکر
با سلام به دوستان
من می خواهم هرجایی روی فرم که مختصاتش را بدهم رنگ پیکسل به صورت تفکیک شده RGBبه من داده شود از چه دستوری باید استفاده کنم باید بگم که دستور پیکسل یه عدد 8 رقم بر میگرداند
باتشکر
سلام
GetRValue , GetGValue , GetBValue
ممنون علی
با تشکر
اما من در BCB6 دستوری می خواهم
ممنون
این توابعی که گفتید ماکرو هستند آن وقت ورودی این توابع چیست و از چه دستوری باید به انها مقدار بدهم
باتشکر محسن
سلام
فکر نکنم ماکرو باشند. اینها توابع API ویندوز هستند و در تمام محیطهای برنامه نویسی تحت ویندوز هم قابل استفاده اند. نمیدانم آیا در بیلدر تابعی برای اینکار هست یا نه ولی اگر هم هست توصیه میکنم استفاده نکنید چون برنامه شما وابسته به محیط میشه و مثلا اوونوقت توی ویژوال سی کار نخواهد کرد. ضمنا معمولا توابع API سریعتر از توابع مشابه در Wrapper هایی که Builder دارد هستند. از جمله برای خواندن خود رنگ پیکسلها اوون روش آرایه ای که خود بیلدر داره کندتر از GetPixel مال API عمل میکنه.
و یک سوال شخصی : شما احیانا آقای حامی بیدرنگ نیستید؟
ممنون علی
سلام
ببخشید فراموش کردم. باید عدد رنگ رو به این توابع بدید و این توابع در مقدار بازگشتی مقدار کمپوننتهای تشکیل دهنده رنگ یعنی R و G و B رو به شما برمیگردونند. ضمنا در MSDN راهنمای این توابع و همینطور در راهنمای خود بیلدر هم هست.
ممنون علی
با تشکر فراوان
دادن رنگ را میشه به این صورت انجام داد canvas->pixel[][]c یا جور دیگری است
نه من محسن حامی هستم و اصفهانی
سلام
همونطوری که گفتید هم میشه.
ممنون علی
TColor C1 ;
BYTE R, G, B ;
void __fastcall TForm1::FormMouseDown(TObject *Sender, TMouseButton Button,
TShiftState Shift, int X, int Y)
{
C1 = Canvas->Pixels[X][Y] ;
R = GetRValue((DWORD)C1) ;
G = GetGValue((DWORD)C1) ;
B = GetBValue((DWORD)C1) ;
}
دوست عزیز گیرم که دستوری هم پیدا نکردی خب خودت مقادیر رو جدا میکردی.
r = (lColor And &HFF&)
g = (lColor And &HFF00&) / &H100
b = (lColor And &HFF0000) / &H10000
ممنون از همه دوستان جواب گرفتم
نوشته شده توسط PalizeSoftware
سلام
نه نه ! اینکار کاملا اشتباهه. این کدی که شما نوشتید کار درستی نیست چون فقط در مود ۲۴ یا ۳۲ بیتی کار میکنه (منظور مود گرافیک است) و در مودهای ۱۶ یا هر عمق بیت دیگری بیت جواب نخواهد داد. روش درستش در API همون استفاده از سه تابع ذکر شده است.
ممنون علی
دوست عزیز من نگفتم این کد در همه مدها جواب میده. بلکه اشاره به این دارم که تفکیک مقدار هر رنگ فرمول پیچیدهای نیست که کار کسی بخواد بابتش لنگ بمونه. یه عدد چند بیتی است که این روش جداسازی بیتها رو توضیح میده.