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

Вниз

Как преобразовать пиксель 16бит в 24 бит RGB BMP   Найти похожие ветки 

 
Vladimirs ©   (2005-03-08 19:17) [0]

Как преобразовать пиксель 16 бит в 24 бит RGB
Спасибо за любую помощь!


 
uny ©   (2005-03-08 19:23) [1]

>пиксель 16 бит
формат какой? нужно в формат 24 бит rgb, а из какого?


 
Vladimirs ©   (2005-03-08 19:27) [2]

формат RGB BMP 16 bitperpixel


 
Fenik   (2005-03-08 19:38) [3]

Bitmap.PixelFormat := pf24Bit; ??


 
Vladimirs ©   (2005-03-08 19:40) [4]

Мне надо ПИКСЕЛЬ 16бит вручную взять из BMP и по алгоритму (который для меня загадка) преобразовать его в 24 бита пиксель.
На сколько я знаю в 16 бит R G B цветам отведено по 5 бит.


 
uny ©   (2005-03-08 19:42) [5]

[2] Vladimirs ©   (08.03.05 19:27)
если не подходит  [3] Fenik,
то делайте вручную - в фотошопе если нажать сохранить как и выбрать расширенные параметры, то показываются возможные варианты 16 битного бмп - по 5 бит на каждый цвет, по 5, а на зелёный 6 бит и вроде ещё.
берёте 16 бит и достаёте цвета, скажем   (pixel and 31) = выделили младшие 5 бит, какой то цвет


 
Fenik   (2005-03-08 20:23) [6]

var Color: TColor;
   R, G, B: Byte;
begin
 Color := Bitmap.Canvas.Pixels[x, y];

 R := Lo(Color);
 G := Lo(Color shr 8);
 B := Lo((Color shr 8) shr 8);
end;

или почитай http://www.delphimaster.ru/articles/pixels/index.html


 
Eraser ©   (2005-03-09 11:45) [7]

Vladimirs ©

Всё не так просто, есть два 16 битных формата- RGB555 и RGB565, я одно время с этим запарился...


 
Хочу помочь   (2005-03-09 20:28) [8]


var ABitmap: TBitmap;
 Pixel16: Word;
 R16: 0..31; // 5 bits
 G16: 0..63; // 6 bits
 B16: 0..31; // 5 bits

 Red, Green, Blue: Byte;
 rgbRed, rgbGreen, rgbBlue: Byte;

begin

 R16 := 31; // Max Red
 G16 := 63; // Max Green
 B16 := 0; // No Blue

 Pixel16 := (R16 shl 11) or (G16 shl 5) or B16;

 Red := (Pixel16 and $F800) shr 11;  // $F800 = 1111 1000 0000 0000
 Green := (Pixel16 and $7E0) shr 5;  // $7E0 = 0000 0111 1110 0000
 Blue := (Pixel16 and $1F);    // $1F = 0000 0000 0001 1111

 ShowMessage("RGB16:  " + IntToStr(Red) + "; " + IntToStr(Green) +
   "; " + IntToStr(Blue));

 rgbRed := Trunc(Red / 31 * 255);
 rgbGreen := Trunc(Green / 63 * 255);
 rgbBlue := Trunc(Blue / 31 * 255);

 ShowMessage("RGB24:  " + IntToStr(rgbRed) + "; " + IntToStr(rgbGreen) +
   "; " + IntToStr(rgbBlue));


 
uny ©   (2005-03-09 20:40) [9]

>31 * 255
>63 * 255
а если просто умножить на 8 и на 4 соответственно?


 
Хочу помочь   (2005-03-10 19:11) [10]

>а если просто умножить на 8 и на 4 соответственно?

В ходе оптимизации - разумеется.



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

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

Наверх





Память: 0.46 MB
Время: 0.039 c
14-1117717481
evvcom
2005-06-02 17:04
2005.07.11
Продолжение дискуссии "Как избежать гонок в потоках"


8-1106824232
dima
2005-01-27 14:10
2005.07.11
компоненты delphi для работы со звуком


1-1119555465
Diaskhan
2005-06-23 23:37
2005.07.11
VCL outlook panel


14-1118861856
yaJohn
2005-06-15 22:57
2005.07.11
хостинг с условиями


1-1118151224
Ded Moroz
2005-06-07 17:33
2005.07.11
TListView





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский