نمایش نتایج 1 تا 13 از 13

نام تاپیک: رنگ پیکسل به صورت RGB

  1. #1
    کاربر تازه وارد
    تاریخ عضویت
    دی 1383
    محل زندگی
    Esfahan , Iran
    سن
    44
    پست
    63

    رنگ پیکسل به صورت RGB

    با سلام به دوستان


    من می خواهم هرجایی روی فرم که مختصاتش را بدهم رنگ پیکسل به صورت تفکیک شده RGBبه من داده شود از چه دستوری باید استفاده کنم باید بگم که دستور پیکسل یه عدد 8 رقم بر میگرداند

    باتشکر

  2. #2
    سلام
    GetRValue , GetGValue , GetBValue
    ممنون علی

  3. #3
    کاربر تازه وارد
    تاریخ عضویت
    دی 1383
    محل زندگی
    Esfahan , Iran
    سن
    44
    پست
    63
    با تشکر

    اما من در BCB6 دستوری می خواهم

    ممنون

  4. #4
    کاربر تازه وارد
    تاریخ عضویت
    دی 1383
    محل زندگی
    Esfahan , Iran
    سن
    44
    پست
    63
    این توابعی که گفتید ماکرو هستند آن وقت ورودی این توابع چیست و از چه دستوری باید به انها مقدار بدهم

    باتشکر محسن

  5. #5
    سلام
    فکر نکنم ماکرو باشند. اینها توابع API ویندوز هستند و در تمام محیطهای برنامه نویسی تحت ویندوز هم قابل استفاده اند. نمیدانم آیا در بیلدر تابعی برای اینکار هست یا نه ولی اگر هم هست توصیه میکنم استفاده نکنید چون برنامه شما وابسته به محیط میشه و مثلا اوونوقت توی ویژوال سی کار نخواهد کرد. ضمنا معمولا توابع API سریعتر از توابع مشابه در Wrapper هایی که Builder دارد هستند. از جمله برای خواندن خود رنگ پیکسلها اوون روش آرایه ای که خود بیلدر داره کندتر از GetPixel مال API عمل میکنه.
    و یک سوال شخصی : شما احیانا آقای حامی بیدرنگ نیستید؟
    ممنون علی

  6. #6
    سلام
    ببخشید فراموش کردم. باید عدد رنگ رو به این توابع بدید و این توابع در مقدار بازگشتی مقدار کمپوننتهای تشکیل دهنده رنگ یعنی R و G و B رو به شما برمیگردونند. ضمنا در MSDN راهنمای این توابع و همینطور در راهنمای خود بیلدر هم هست.
    ممنون علی

  7. #7
    کاربر تازه وارد
    تاریخ عضویت
    دی 1383
    محل زندگی
    Esfahan , Iran
    سن
    44
    پست
    63
    با تشکر فراوان

    دادن رنگ را میشه به این صورت انجام داد canvas->pixel[][]c یا جور دیگری است

    نه من محسن حامی هستم و اصفهانی

  8. #8
    سلام
    همونطوری که گفتید هم میشه.
    ممنون علی

  9. #9
    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) ;
    }

  10. #10
    دوست عزیز گیرم که دستوری هم پیدا نکردی خب خودت مقادیر رو جدا می‌کردی.

    r = (lColor And &HFF&)
    g = (lColor And &HFF00&) / &H100
    b = (lColor And &HFF0000) / &H10000

  11. #11
    کاربر تازه وارد
    تاریخ عضویت
    دی 1383
    محل زندگی
    Esfahan , Iran
    سن
    44
    پست
    63
    ممنون از همه دوستان جواب گرفتم

  12. #12
    نقل قول نوشته شده توسط PalizeSoftware
    دوست عزیز گیرم که دستوری هم پیدا نکردی خب خودت مقادیر رو جدا می‌کردی.

    r = (lColor And &HFF&)
    g = (lColor And &HFF00&) / &H100
    b = (lColor And &HFF0000) / &H10000

    سلام
    نه نه !‌ اینکار کاملا اشتباهه. این کدی که شما نوشتید کار درستی نیست چون فقط در مود ۲۴ یا ۳۲ بیتی کار میکنه (منظور مود گرافیک است) و در مودهای ۱۶ یا هر عمق بیت دیگری بیت جواب نخواهد داد. روش درستش در API همون استفاده از سه تابع ذکر شده است.
    ممنون علی

  13. #13
    دوست عزیز من نگفتم این کد در همه مدها جواب می‌ده. بلکه اشاره به این دارم که تفکیک مقدار هر رنگ فرمول پیچیده‌ای نیست که کار کسی بخواد بابتش لنگ بمونه. یه عدد چند بیتی است که این روش جداسازی بیت‌ها رو توضیح می‌ده.

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •