OLE_COLOR to RGB (переписать с VB на C#)
От: Аноним  
Дата: 15.03.10 08:23
Оценка:
Есть две задачи по конвертации разных форматов цвета:

1. OLE_COLOR в RGB
2. RGB в OLE_COLOR

Как я понимаю, OLE_COLOR используется исключительно в VB и все функции написаны в нем. Помогите переписать с одного языка на другой:


Private Function SwitchColor(OldCol As Long)
Dim Rval As Long, Gval As Long, Bval As Long
Rval = OldCol And 255
Gval = (OldCol And 65280) / 256
Bval = (OldCol And 16711680) / 65536
SwitchColor = (Rval * 65536) + (Gval * 256) + Bval
End Function
Re: OLE_COLOR to RGB (переписать с VB на C#)
От: _FRED_ Черногория
Дата: 15.03.10 08:47
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Есть две задачи по конвертации разных форматов цвета:

А>1. OLE_COLOR в RGB

ColorTranslator.FromOle Method

А>2. RGB в OLE_COLOR


ColorTranslator.ToOle Method

И, вообще, хозяйке на заметку: ColorTranslator Members
Help will always be given at Hogwarts to those who ask for it.
Re[2]: OLE_COLOR to RGB (переписать с VB на C#)
От: Аноним  
Дата: 15.03.10 09:07
Оценка:
Здравствуйте, _FRED_, Вы писали:

А это правильно, что ColorTranslator переводит и белый и прозрачный цвет как одно и тоже ? В RGB у них хотя бы альфа канал отличается ...

using System;
using System.Collections.Generic;
using System.Text;
using System.Drawing;

namespace ConsoleApplication3
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("[White color to OLE]:" + ColorTranslator.ToOle(Color.White));  // ?
            Console.WriteLine("[Transparent color to OLE]:" + ColorTranslator.ToOle(Color.Transparent)); // ?

            Console.WriteLine(Color.White.R + ":" + Color.White.G + ":" + Color.White.B + ":" + Color.White.A);
            Console.WriteLine(Color.Transparent.R + ":" + Color.Transparent.G + ":" + Color.Transparent.B + ":" + Color.Transparent.A);

            Console.Read();
        }
    }
}
Re[3]: OLE_COLOR to RGB (переписать с VB на C#)
От: _FRED_ Черногория
Дата: 15.03.10 09:41
Оценка:
Здравствуйте, Аноним, Вы писали:

А>А это правильно, что ColorTranslator переводит и белый и прозрачный цвет как одно и тоже ? В RGB у них хотя бы альфа канал отличается ...


Даже судя по примеру из стартового собщения — правильно. В том примере альфа канал вообще никак не учитывается, и ColorTranslator его не учитывает, так что всё нормально

Биты, которые а ARGB используются под альфа-канал, в OLE_COLOR используются для идентификации специального цвета, например, цвета рабочего стола или цвета выделения, или цвета фона окна… так что под альфа-канал в OLE_COLOR попросту нет места.
Help will always be given at Hogwarts to those who ask for it.
Re[3]: OLE_COLOR to RGB (переписать с VB на C#)
От: Мишень-сан  
Дата: 15.03.10 09:42
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, _FRED_, Вы писали:


А>А это правильно, что ColorTranslator переводит и белый и прозрачный цвет как одно и тоже ? В RGB у них хотя бы альфа канал отличается ...


Видимо, так задумано.
Посмотрите реализацию рефлектором — увидите большой свитч и в конце делегирование к ToWin32, которая плевать хотела на альфа-канал.
Re[4]: OLE_COLOR to RGB (переписать с VB на C#)
От: _FRED_ Черногория
Дата: 15.03.10 11:32
Оценка:
Здравствуйте, _FRED_, Вы писали:

А>>А это правильно, что ColorTranslator переводит и белый и прозрачный цвет как одно и тоже ? В RGB у них хотя бы альфа канал отличается ...


_FR>Биты, которые а ARGB используются под альфа-канал, в OLE_COLOR используются для идентификации специального цвета, например, цвета рабочего стола или цвета выделения, или цвета фона окна… так что под альфа-канал в OLE_COLOR попросту нет места.


Более точно определение:

An OLE_COLOR is a Windows defined data type. It is 32 bits in size and closely resembles a Visual Basic Long Integer. The most significant byte may have one of three values. If it has a value of 0x00 then the remaining three bytes are used to define an RGB color where a byte is used per primary. If the most significant byte has a value of 0x80 then the remaining bytes define a system color such as vbButtonFace or vbWindowBackground. Finally, if the most significant byte has a value of 0x01 then the least significant byte defines an offset into an external palette.


http://www.atalasoft.com/products/imgxasp/docs/ImagingConcepts.html
Help will always be given at Hogwarts to those who ask for it.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.