如有这样一组16进制数:0000 FFFF 4DC5 FFFF ,其中0000为黑色、FFFF为白色,
每两个字节可表示一个6万5千色的一个点,共有4个点,我想在Image上把它画出来,可是如何将它转换为相应的RGB值呢?

解决方案 »

  1.   

    你对Color直接赋值不就行了吗,Color本来就可以用这个表示,如果你得数组本身存得就是integer类型得,不用转,如果是字符串加多个$,然后strtoint转一下还是说你还要分离除R,G,B,3个分量?
      

  2.   

    我先也是这样直接赋值,但FFFF就不是白色而是红色了,4DC5也不是对,所以要分离出R,G,B,3个分量。就是不知道怎么转换。
      

  3.   

    看到头都大了,TColor中白色不应该是$00FFFFFF?
    如果要分离R G B,可以这样:
        R:= Color and $FF;
        G:=(Color and $FF00) Shr 8;
        B:=(Color and $FF0000) Shr 16;
      

  4.   

    我找到了,用这种方法,谢谢各位了。
    procedure TForm1.Button1Click(Sender: TObject);
    VAR
        Bitmap:  TBitmap;
        i     :  INTEGER;
        j     :  INTEGER;    R     :  0..31;  // 5 bits
        G     :  0..63;  // 6 bits (eye is most sensitive to green)
        B     :  0..31;  // 5 bits    RGB   :  WORD;
        Row   :  pWordArray;   // from SysUtils
    begin
      Bitmap := TBitmap.Create;
      TRY
        Bitmap.Width  := Image1.Width;
        Bitmap.Height := Image1.Height;
        Bitmap.PixelFormat := pf16bit;    R := 31;    // Max Red
        G := 63;    // Max Green
        B :=  0;    // No Blue    // "FillRect" using Scanline
        RGB := (R SHL 11) OR (G SHL 5) OR B;  // "yellow"    FOR j := 0 TO Bitmap.Height-1 DO
        BEGIN
          Row := Bitmap.Scanline[j];
          FOR  i := 0 TO Bitmap.Width-1 DO
            Row[i] := RGB
        END;    Image1.Picture.Graphic := Bitmap
      FINALLY
        Bitmap.Free
      ENDend;