Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.07.11;
Скачать: CL | DM;

Вниз

Как преобразовать пиксель 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 вся ветка

Текущий архив: 2005.07.11;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.039 c
5-1089872243
ViJen
2004-07-15 10:17
2005.07.11
DbGrid, DateTimePicker и прокрутка


14-1118028469
kaan
2005-06-06 07:27
2005.07.11
Процесс увольнения


1-1118401758
!Trinix
2005-06-10 15:09
2005.07.11
Время


3-1117461592
Iova
2005-05-30 17:59
2005.07.11
Как соединить 2 таблицы?


3-1116990195
Stef
2005-05-25 07:03
2005.07.11
Шифрование БД