كيف يمكنني تحويل قيمة ARGB من سلسلة إلى لون؟
سؤال
أحاول استخدام MakeColor
الطريقة في وحدة gdipapi ولكن التحويل من int
إلى byte
لا يعيد لي القيمة الصحيحة.
مثال
var
argbStr: string;
A, R, G, B: Byte;
begin
argbStr := 'ffffcc88';
A := StrToInt('$' + Copy(AValue, 1, 2));
R := StrToInt('$' + Copy(AValue, 3, 2));
G := StrToInt('$' + Copy(AValue, 5, 2));
B := StrToInt('$' + Copy(AValue, 7, 2));
Result := MakeColor(A, R, G, B);
end;
ما الخطأ الذي افعله؟
المحلول
مكونات الألوان في السلسلة الخاصة بك هي في نفس الترتيب الذي سيكون لديهم في أ ARGB
القيمة. لذلك ، لا تحتاج إلى فصل المكونات قبل الجمع بينها MakeColor
. يمكنك القيام بالتحويل مباشرة:
function StringToARGB(const argbStr: string): GDIPAPI.ARGB;
begin
Result := ARGB(StrToInt('$' + argbStr));
end;
يعد النوع الضار ضروريًا لقمع خطأ في فحص النطاق الذي ستحصل عليه كلما كان مكون ألفا أكبر من 127 ؛ StrToInt
يعيد عدد صحيح موقّع ، لكن ARGB
هو نوع غير موقّع.
نصائح أخرى
تغيير نوع A, R, G, B
يبدو أن عدد صحيح يصلح المشكلة. يجب أن يكون الأمر يتعلق بالصب بين عدد صحيح -> بايت.
لا تنتمي إلى StackOverflow