كيف يمكنني تحويل قيمة ARGB من سلسلة إلى لون؟

StackOverflow https://stackoverflow.com/questions/2691382

  •  01-10-2019
  •  | 
  •  

سؤال

أحاول استخدام 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 يبدو أن عدد صحيح يصلح المشكلة. يجب أن يكون الأمر يتعلق بالصب بين عدد صحيح -> بايت.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top