Текущий архив: 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.46 MB
Время: 0.048 c