![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как преобразовать пиксель 16бит в 24 бит RGB BMP
Vladimirs © (2005-03-08 19:17:00)Как преобразовать пиксель 16 бит в 24 бит RGB
Спасибо за любую помощь!
Хочу помочь (2005-03-10 19:11:00) [1]>а если просто умножить на 8 и на 4 соответственно?
В ходе оптимизации - разумеется.
uny (2005-03-09 20:40:00) [2]>31 * 255
>63 * 255
а если просто умножить на 8 и на 4 соответственно?
Хочу помочь (2005-03-09 20:28:00) [3]
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));
Eraser (2005-03-09 11:45:00) [4]Vladimirs ©
Всё не так просто, есть два 16 битных формата- RGB555 и RGB565, я одно время с этим запарился...
Fenik (2005-03-08 20:23:00) [5]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
uny (2005-03-08 19:42:00) [6][2] Vladimirs © (08.03.05 19:27)
если не подходит [3] Fenik,
то делайте вручную - в фотошопе если нажать сохранить как и выбрать расширенные параметры, то показываются возможные варианты 16 битного бмп - по 5 бит на каждый цвет, по 5, а на зелёный 6 бит и вроде ещё.
берёте 16 бит и достаёте цвета, скажем (pixel and 31) = выделили младшие 5 бит, какой то цвет
Vladimirs (2005-03-08 19:40:00) [7]Мне надо ПИКСЕЛЬ 16бит вручную взять из BMP и по алгоритму (который для меня загадка) преобразовать его в 24 бита пиксель.
На сколько я знаю в 16 бит R G B цветам отведено по 5 бит.
Fenik (2005-03-08 19:38:00) [8]Bitmap.PixelFormat := pf24Bit; ??
Vladimirs (2005-03-08 19:27:00) [9]формат RGB BMP 16 bitperpixel
uny (2005-03-08 19:23:00) [10]>пиксель 16 бит
формат какой? нужно в формат 24 бит rgb, а из какого?