Форум на Kuban.ru (http://forums.kuban.ru/)
-   Разработка программ (http://forums.kuban.ru/f1024/)
-   -   Графическая кодировка GDI (http://forums.kuban.ru/f1024/graficheskaya_kodirovka_gdi-2728282.html)

WeMaN 16.06.2012 16:21

Графическая кодировка GDI
 
Доброго времени суток. Собственно возникла у меня такая проблемка. Я не программист, поэтому собственно и требуется помощь знающих людей, кто сталкивался, а я думаю такие есть, с подобной штукой, в общем буду изъясняться как могу, если что некорректно объясню, поправляйте, уточняйте, ибо для меня всё это тёмный лес.
Есть программка, в ней текстовый файлик, суть в том, что мне в этом текстовом файле нужно задать интересующий меня цвет, по умолчанию там стоит 0, мне же необходим именно мой цвет, сгенерированный в 16ричной системе. Дело в том, что программа понимает только GDI кодировку виндоус, и поэтому ни RGB ни тем более Hex код я ввести не могу, скажите, есть ли какие то конверторы, позволяющие перевести Hex в GDI код. Про саму эту кодировку знаю, что 0 в ней это чёрный, а вот зеленый цвет допустим который в Hex будет 00FF00 в терминологии GDI обозначен кодом 32768, всё далее сегодняшние поиски в гугле никак успехом не увенчались, узнал только что вроде бы это связано с языком С++ может и нет, собственно стоит вот такая задача у меня есть 10-15 Hex кодов как мне узнать их обозначение в кодировке GDI и возможно ли это вообще. Всё спасибо за внимание, если что непонятного уточняйте, надеюсь на помощь.

economist 16.06.2012 19:45

WeMaN - вы встали на тропу войны, назвав GDI кодировкой. Если хотите победить - опишите ситуацию подробнее. Есть масса способов перехватить вывод на печать и подменить цвет. Ключ - PDF. А именно в opensource - решениях.

WeMaN 17.06.2012 01:51

какая тропа, какой то программер написал скрипт на vba для AutoCad в котором цвет создаваемого скриптом объекта задаётся не Hex'ом а в GDI формате, вопрос в том, как мне узнать какой номер имеет цвет в GDI если в Hex'e он допустим 00FF00, ну тут то знаю что зеленый, а остальные как... смысл в том, что должны быть палитры или что то по типу этого, что ещё пояснить суть работы скрипта?

WeMaN 17.06.2012 01:53

Скрипт в AutoCad рисует линию, по умолчанию её цвет "0" т.е. черный, если параметр изменить с "0" на "32768" цвет линии будет зеленый, как узнать коды других цветов...

TVV1 17.06.2012 02:32

попробуй задать другие значения и определить получившееся для них цвета или открой help к autocad и почитай что они там по этому поводу пишут. Так же обратись в службу поддержки пускай отробатывают бабки ;)

And_justice_for_all 17.06.2012 10:23

3-WeMaN > сдается мне, что надо просто в одной системе исчислять - либо X, либо D.

Технолог 17.06.2012 13:12

[em]у меня есть 10-15 Hex кодов как мне узнать их обозначение в кодировке GDI[/em]
Совершенно случайно #00FF00 = Dec 32768 = RGB 0,128,0
По идее Желтый = RGB 255, 255, 0 = Hex #FFFF00 = Dec 16776960

vxg 17.06.2012 18:45

это может(должен?) быть не "GDI" а ACI.
//------------------------------------------------------------------------------
#ifndef aci_h
#define aci_h
//------------------------------------------------------------------------------
extern int aci[257][3];
//------------------------------------------------------------------------------
int gl_color_to_aci(const float &r, const float &g, const float &b);
//------------------------------------------------------------------------------
#endif //aci_h
//////////////////////////////////////////////////////

//------------------------------------------------------------------------------
#include "aci.h"
//------------------------------------------------------------------------------
#include <math.h>
//------------------------------------------------------------------------------
int aci[257][3] =
**
{0, 0, 0**, //по блоку
{255, 0, 0**,
{255, 255, 0**,
{0, 255, 0**,
{0, 255, 255**,
{0, 0, 255**,
{255, 0, 255**,
{0, 0, 0**, //белый/черный
{65, 65, 65**,
{128, 128, 128**,
{255, 0, 0**,
{255, 170, 170**,
{189, 0, 0**,
{189, 126, 126**,
{129, 0, 0**,
{129, 86, 86**,
{104, 0, 0**,
{104, 69, 69**,
{79, 0, 0**,
{79, 53, 53**,
{255, 63, 0**,
{255, 191, 170**,
{189, 46, 0**,
{189, 141, 126**,
{129, 31, 0**,
{129, 96, 86**,
{104, 25, 0**,
{104, 78, 69**,
{79, 19, 0**,
{79, 59, 53**,
{255, 127, 0**,
{255, 212, 170**,
{189, 94, 0**,
{189, 157, 126**,
{129, 64, 0**,
{129, 107, 86**,
{104, 52, 0**,
{104, 86, 69**,
{79, 39, 0**,
{79, 66, 53**,
{255, 191, 0**,
{255, 234, 170**,
{189, 141, 0**,
{189, 173, 126**,
{129, 96, 0**,
{129, 118, 86**,
{104, 78, 0**,
{104, 95, 69**,
{79, 59, 0**,
{79, 73, 53**,
{255, 255, 0**,
{255, 255, 170**,
{189, 189, 0**,
{189, 189, 126**,
{129, 129, 0**,
{129, 129, 86**,
{104, 104, 0**,
{104, 104, 69**,
{79, 79, 0**,
{79, 79, 53**,
{191, 255, 0**,
{234, 255, 170**,
{141, 189, 0**,
{173, 189, 126**,
{96, 129, 0**,
{118, 129, 86**,
{78, 104, 0**,
{95, 104, 69**,
{59, 79, 0**,
{73, 79, 53**,
{127, 255, 0**,
{212, 255, 170**,
{94, 189, 0**,
{157, 189, 126**,
{64, 129, 0**,
{107, 129, 86**,
{52, 104, 0**,
{86, 104, 69**,
{39, 79, 0**,
{66, 79, 53**,
{63, 255, 0**,
{191, 255, 170**,
{46, 189, 0**,
{141, 189, 126**,
{31, 129, 0**,
{96, 129, 86**,
{25, 104, 0**,
{78, 104, 69**,
{19, 79, 0**,
{59, 79, 53**,
{0, 255, 0**,
{170, 255, 170**,
{0, 189, 0**,
{126, 189, 126**,
{0, 129, 0**,
{86, 129, 86**,
{0, 104, 0**,
{69, 104, 69**,
{0, 79, 0**,
{53, 79, 53**,
{0, 255, 63**,
{170, 255, 191**,
{0, 189, 46**,
{126, 189, 141**,
{0, 129, 31**,
{86, 129, 96**,
{0, 104, 25**,
{69, 104, 78**,
{0, 79, 19**,
{53, 79, 59**,
{0, 255, 127**,
{170, 255, 212**,
{0, 189, 94**,
{126, 189, 157**,
{0, 129, 64**,
{86, 129, 107**,
{0, 104, 52**,
{69, 104, 86**,
{0, 79, 39**,
{53, 79, 66**,
{0, 255, 191**,
{170, 255, 234**,
{0, 189, 141**,
{126, 189, 173**,
{0, 129, 96**,
{86, 129, 118**,
{0, 104, 78**,
{69, 104, 95**,
{0, 79, 59**,
{53, 79, 73**,
{0, 255, 255**,
{170, 255, 255**,
{0, 189, 189**,
{126, 189, 189**,
{0, 129, 129**,
{86, 129, 129**,
{0, 104, 104**,
{69, 104, 104**,
{0, 79, 79**,
{53, 79, 79**,
{0, 191, 255**,
{170, 234, 255**,
{0, 141, 189**,
{126, 173, 189**,
{0, 96, 129**,
{86, 118, 129**,
{0, 78, 104**,
{69, 95, 104**,
{0, 59, 79**,
{53, 73, 79**,
{0, 127, 255**,
{170, 212, 255**,
{0, 94, 189**,
{126, 157, 189**,
{0, 64, 129**,
{86, 107, 129**,
{0, 52, 104**,
{69, 86, 104**,
{0, 39, 79**,
{53, 66, 79**,
{0, 63, 255**,
{170, 191, 255**,
{0, 46, 189**,
{126, 141, 189**,
{0, 31, 129**,
{86, 96, 129**,
{0, 25, 104**,
{69, 78, 104**,
{0, 19, 79**,
{53, 59, 79**,
{0, 0, 255**,
{170, 170, 255**,
{0, 0, 189**,
{126, 126, 189**,
{0, 0, 129**,
{86, 86, 129**,
{0, 0, 104**,
{69, 69, 104**,
{0, 0, 79**,
{53, 53, 79**,
{63, 0, 255**,
{191, 170, 255**,
{46, 0, 189**,
{141, 126, 189**,
{31, 0, 129**,
{96, 86, 129**,
{25, 0, 104**,
{78, 69, 104**,
{19, 0, 79**,
{59, 53, 79**,
{127, 0, 255**,
{212, 170, 255**,
{94, 0, 189**,
{157, 126, 189**,
{64, 0, 129**,
{107, 86, 129**,
{52, 0, 104**,
{86, 69, 104**,
{39, 0, 79**,
{66, 53, 79**,
{191, 0, 255**,
{234, 170, 255**,
{141, 0, 189**,
{173, 126, 189**,
{96, 0, 129**,
{118, 86, 129**,
{78, 0, 104**,
{95, 69, 104**,
{59, 0, 79**,
{73, 53, 79**,
{255, 0, 255**,
{255, 170, 255**,
{189, 0, 189**,
{189, 126, 189**,
{129, 0, 129**,
{129, 86, 129**,
{104, 0, 104**,
{104, 69, 104**,
{79, 0, 79**,
{79, 53, 79**,
{255, 0, 191**,
{255, 170, 234**,
{189, 0, 141**,
{189, 126, 173**,
{129, 0, 96**,
{129, 86, 118**,
{104, 0, 78**,
{104, 69, 95**,
{79, 0, 59**,
{79, 53, 73**,
{255, 0, 127**,
{255, 170, 212**,
{189, 0, 94**,
{189, 126, 157**,
{129, 0, 64**,
{129, 86, 107**,
{104, 0, 52**,
{104, 69, 86**,
{79, 0, 39**,
{79, 53, 66**,
{255, 0, 63**,
{255, 170, 191**,
{189, 0, 46**,
{189, 126, 141**,
{129, 0, 31**,
{129, 86, 96**,
{104, 0, 25**,
{104, 69, 78**,
{79, 0, 19**,
{79, 53, 59**,
{51, 51, 51**,
{80, 80, 80**,
{105, 105, 105**,
{130, 130, 130**,
{190, 190, 190**,
{255, 255, 255**,
{0, 0, 0** //по слою
**;
//------------------------------------------------------------------------------
int gl_color_to_aci(const float &r, const float &g, const float &b)
**
int res = 7;

int _r = r * 255;
int _g = g * 255;
int _b = b * 255;

int d = 255 * 255 * 3;

for (int i = 1; i <= 255; i++)
**
int _d = pow(aci[i][0] - _r, 2) + pow(aci[i][1] - _g, 2) + pow(aci[i][2] - _b, 2);
if (_d < d)
**
d = _d;
res = i;
**
**

return res;
**

vxg 17.06.2012 18:47

...как загадочно форму открывающиеся фигурные скобки коробит...

vxg 17.06.2012 19:01

[url]http://sub-atomic.com/~moses/acadcolors.html[/url]

WeMaN 18.06.2012 09:31

Люди-человеки, не издевайтесь, я вообще вас не понимаю, пишу же что не программист, мне просто нужно узнать что означает код HEx если его перевести в GDI!
4, ACAD тут особо не при чём, это левый самопальный Vba скрипт использующий для обозначения цвета библиотеку GDI
5, вообще не понял толком ничего
6, нет там 5 знаков быть должно
7, я не программист зачем всё это?!
9, да хорошая штука, но мне нада из Hex в GDI а не в RGB!

And_justice_for_all 18.06.2012 16:02

10-WeMaN > я имел в виду, что 32768 в hex = 0x008000, а это один из оттенков зеленого.

And_justice_for_all 18.06.2012 16:04

[em]а вот зеленый цвет допустим который в Hex будет 00FF00 в терминологии GDI обозначен кодом 32768[/em] - это ты как выяснил? :)
Что именно 00FF00 = 32768 в GDI?
Короче, задавай цвет в HEX и переводи его в DEC в калькуляторе, да и все.

TVV1 18.06.2012 16:13

Есть еще такая штука
[url]http://msdn.microsoft.com/en-us/library/windows/hardware/ff566496%28v=vs.85%29.aspx[/url]

Но что то сомнительна что она для этого случая

And_justice_for_all 18.06.2012 16:45

13-TVV1 > Да это кажется просто к тому, что есть 16-битный и 24-битный цвет.

vxg 19.06.2012 08:30

может вы не можете получить адекватный результат из-за обратного порядка байт в коде цвета? вы пробовали вводить 0000FF = 255 (красный) или FF0000 = 16711680 (синий)?

WeMaN 22.06.2012 09:23

12 и всем Да 5ти значная там кодировка из Hexа в десятиричной лезут 6 7 и выше знаки, тут 5 значная 32 битная кодировка цвета...
Я не пойму неужели нету палитры?! Программисты, ау!

vxg 22.06.2012 11:11

"5 значная 32 битная кодировка цвета"????
вы имеете ввиду что после преобразования кода цвета в десятичное число оно получается не длиннее чем 5 знаков? тогда это скорее всего цвет из 16 или 15 битов. вам TVV1 дал ссылку. однако для 5/5/5 чистый зеленый будет 000001111100000 = 992, а для 5/6/5 чистый зеленый будет 0000011111100000 = 2016 что никак не совпадает с приведенным вами кодом 32768 - который как вам сказали очень очень очень сильно смахивает на цвета вида 8/8/8.


Текущее время: 11:34. Часовой пояс GMT +3.