Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Media";
Текущий архив: 2005.11.27;
Скачать: [xml.tar.bz2];

Вниз

Палитра   Найти похожие ветки 

 
Radgar ©   (2005-07-01 14:02) [0]

Подскажите, пожалуйста, как узнать палитру у определенного пикселя TImage, в таком формате Red - xxx, Blue - xxx, Green -xxx.


 
Alexander Panov ©   (2005-07-01 14:39) [1]

А что такое палитра у пикселя?


 
Анонимщики ©   (2005-07-01 14:46) [2]

Зря я тебе порекомендовал к поисковым серверам обратиться.
Читай хелп по графике, пока что-нибудь не поймешь.

А палитру имеет (может иметь) не отдельный пиксел, а все изображение в целом.
Смотри. Есть, предположим, графический файл, скажем, для простоты, bmp. У него в заголовке записано, какой формат имеют пикселы (отдельные точки) этой картинки. Картинку может иметь палитру - это индексированная, точнее, нумерованная, таблица элементов, каждый элемент которой имеет номер и соответствующие ему значения - R (red), G (green) и B (blue), все - от 0 до 255; сколько таких элементов - вопрос третий. В той области файла, где хранятся данные, хранятся вместо троек (R, G, B) индексы палитры - так компактнее.
Но картинка может палитры и не иметь, тогда указывается не индекс элемента палитры, а сама тройка.
При отображении в TImage ты можешь получить каждый цвет каждой точки через TImage.Picture.Bitmap.Canvas.Pixels[X, Y] - результат будет типа TColor; при этом тип витмэпа (HandleType) должен быть DIB. Доступаться таким образом по очереди к каждой точке неэффективно, гораздо лучше использовать ScanLine битмэпа (тебе это будет делать проще всего при 24 битах на пиксел). Чтобы, затем, получить значения R, G и B, нужно будет вызвать функции GetRValue, GetGValue и GetBValue.

Читай хелп по:
TImage, TPicture, TBitmap, TCanvas, TColor.


 
Radgar ©   (2005-07-01 14:56) [3]

Анонимщики ©


> гораздо лучше использовать ScanLine битмэпа


Посоветуй что лучше сделать, если мне надо считать R G B при  OnMouseDown.


 
Digitman ©   (2005-07-01 16:05) [4]


> при  OnMouseDown


при OnMouseDown тебе известны X и Y

дальше - см. [2]


 
uny ©   (2005-07-01 19:20) [5]

tcolor это 32 бита, а не 24, старший байт это номер палитры.


 
Магнитон Борыч   (2005-07-03 17:32) [6]

> uny ©  (01.07.05 19:20) [5]
> tcolor это 32 бита, а не 24, старший байт это номер палитры.


Ты не выспался что ли? Какой номер палитры? :))

> Radgar ©  (01.07.05 14:56) [3]
> Посоветуй что лучше сделать, если мне надо считать R G B при  OnMouseDown.


var C: TColor;
   R, G, B: Byte;
begin
 C := TImage.Canvas.Pixels[X, Y];
 R := Lo(C);
 G := Lo(C shr 8);
 B := Lo((C shr 8) shr 8);
end;


 
Virgo_Style ©   (2005-07-03 21:36) [7]

Магнитон Борыч   (03.07.05 17:32) [6]
R := Lo(C);
G := Lo(C shr 8);
B := Lo((C shr 8) shr 8);


Мне кажется, лучше использовать GetRValue, GetGValue, GetBValue - так красивше =)


 
Магнитон Борыч   (2005-07-04 17:59) [8]

> Virgo_Style ©  (03.07.05 21:36) [7]
Мне кажется, лучше использовать GetRValue, GetGValue, GetBValue - так красивше =)


но дольше.


 
uny ©   (2005-07-04 18:31) [9]

[6] Магнитон Борыч   (03.07.05 17:32)
там же если системная палитра, то одна цифра, если другая палитра - и цифра тоже другая. в справке написано. чем не номера?)


 
Магнитон Борыч   (2005-07-04 21:58) [10]

uny ©  (04.07.05 18:31) [9]

Всё ясно :))


 
uny ©   (2005-07-05 12:32) [11]

Магнитон Борыч   (04.07.05 21:58) [10]
я для этой функции выяснил что значит байт 0. если tcolor
1,2,3 - b,g,r
может моя быстрее ;)

function divdw(dwme:longword; he:byte):byte;
asm //0 1 2 3
      mov     ecx,eax
      cmp     dl,0
      je      @@1
      shl     ecx,8
      cmp     dl,1
      je      @@1
      shl     ecx,8
      cmp     dl,2
      je      @@1
      shl     ecx,8
@@1:   shld    eax,ecx,8
end;


 
Virgo_Style ©   (2005-07-05 16:10) [12]

Магнитон Борыч   (04.07.05 17:59) [8]
но дольше.


В принципе, я об этом подозревал... Но тогда Pixels[] тем более нельзя использовать.


 
Магнитон Борыч   (2005-07-05 20:35) [13]

> Virgo_Style ©  (05.07.05 16:10) [12]
> Но тогда Pixels[] тем более нельзя использовать.


В циклах..


 
Virgo_Style ©   (2005-07-06 08:57) [14]

Магнитон Борыч   (05.07.05 20:35) [13]

На мой взгляд, если важнее простота и удобство, то Pixels и Get..Value, если скорость - то ScanLine и математика, а смешивать их...

В общем, дело вкуса %-)



Страницы: 1 вся ветка

Форум: "Media";
Текущий архив: 2005.11.27;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.015 c
3-1129446032
__Пупкин
2005-10-16 11:00
2005.11.27
Можно ли узнать количество таблиц у SQL сервера


14-1131115835
ArtemESC
2005-11-04 17:50
2005.11.27
Загрузочный сектор


2-1131306176
ruslan.q
2005-11-06 22:42
2005.11.27
E-mail


14-1130918257
Dmseller
2005-11-02 10:57
2005.11.27
bool.ru - предложение


2-1131626075
Тормаз
2005-11-10 15:34
2005.11.27
Подскажите запрос





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский