نوشته شده توسط
abasfar
ممنون از جواب شما
اما ببینید من میخوام بگم مثلا نقطه 25و25 قرمز باشه خوب من دیگه نمیخوام بنویسم مثلا ارایه اولی Color.FromArgb(X).R
بعد ارایه بعدی Color.FromArgb(X).G
,وبعدی Color.FromArgb(X).B
من یکجا خودش مقدار بگیره و سه بایت را مقدار بده
وراستی فکر کنم این تابع با فرمت ما کمی متفاوت است
rgb
255.255.255
ما با این فرمت در نظر میگیریم اما اون برای هرکدام ازرنگها یک شماره در نظر میگیره
سلام.
اگر چه با همون Color.FromArgb میتونید به هدفتون برسید، (همینطور با Shift دادن اعداد و ...)
اما خوب، یه روش دیگه استفاده از چیزی شبیه union ها در C++ هستش. ابتدا در برنامه خودتون،
یک Structure بدین شکل تعریف کنید:
[StructLayout(LayoutKind.Explicit)]
struct RGB
{
[FieldOffset(0)]
public byte R;
[FieldOffset(1)]
public byte G;
[FieldOffset(2)]
public byte B;
[FieldOffset(0)]
public int value;
};
حالا برای استفاده، می تونیم به این شکل عمل کنیم:
RGB color = new RGB();
color.value = 6604840;
اینجا، من از روی Integer ام (که 6604840 باشه)، value ی structure ام رو set میکنم. حالا خط بعدی، اگر بنویسید color.R مقدار 40، color.G مقدار 200 و color.B مقدار 100 رو میگیرید... (همون سه بایتی که دنبالش بودید). یا برعکس، اگر اون سه بایت رو داشته باشید، می تونید بدین شکل به اون Integer برسید:
RGB color = new RGB();
color.R = 40;
color.G = 200;
color.B = 100;
خط بعد اگر color.value رو ببینید، مقدار 6604840 هستش... یعنی به سادگی با تعیین Layout هر فیلد، می تونید مشکلتون رو رفع کنید.
موفق باشید.