Преобразование изображения из 32-хбитного в 24-хбитное

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Преобразование изображения из 32-хбитного в 24-хбитное

Сообщение Demi » 20.02.2013 14:19:33

Добрый день.
Собственно перерыл весь инет в поисках ответа на этот вопрос: как преобразовать 32-хбитный TBitMap в 24-хбитный? Или Хотя бы как нарисовать его на TCanvas 24-хбитного TBitMap так, чтобы пиксели содержащие альфа канал нормально отрисовывались?
Demi
незнакомец
 
Сообщения: 5
Зарегистрирован: 19.02.2013 10:43:41

Re: Преобразование изображения из 32-хбитного в 24-хбитное

Сообщение iskander » 21.02.2013 14:44:04

Как вариант:
Код: Выделить всё
  bmp24 := TBitmap.Create;
  bmp24.PixelFormat := pf24bit;
  bmp24.Width := bmp32.Width;
  bmp24.Height := bmp32.Height;
  bmp24.Canvas.Brush.Color := clWhite;// на белом фоне
  bmp24.Canvas.Brush.Style := bsSolid;
  bmp24.Canvas.FillRect(0,0,bmp24.Width,bmp24.Height);
  bmp24.Canvas.Draw(0,0,bmp32);

Или нужно что-то другое?
iskander
энтузиаст
 
Сообщения: 626
Зарегистрирован: 08.01.2012 18:43:34

Re: Преобразование изображения из 32-хбитного в 24-хбитное

Сообщение Лекс Айрин » 21.02.2013 18:20:12

iskander, скорее всего речь о цвете пикселей.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: Преобразование изображения из 32-хбитного в 24-хбитное

Сообщение Demi » 26.02.2013 15:18:27

iskander, этот вариант не подходит, если исходное изображение содержит альфаканал. Полупрозрачные пиксели становятся черными.
Demi
незнакомец
 
Сообщения: 5
Зарегистрирован: 19.02.2013 10:43:41

Re: Преобразование изображения из 32-хбитного в 24-хбитное

Сообщение Сквозняк » 26.02.2013 18:02:56

Побайтно складывай цвета пикселей с цветом фона, получишь изображение состоящее из двух слоёв, как в графическом редакторе.
Сквозняк
энтузиаст
 
Сообщения: 1129
Зарегистрирован: 29.06.2006 22:08:32

Re: Преобразование изображения из 32-хбитного в 24-хбитное

Сообщение iskander » 26.02.2013 18:30:00

Demi писал(а): Полупрозрачные пиксели становятся черными.

???
Образец можно?
iskander
энтузиаст
 
Сообщения: 626
Зарегистрирован: 08.01.2012 18:43:34

Re: Преобразование изображения из 32-хбитного в 24-хбитное

Сообщение Demi » 27.02.2013 15:16:51

Demi
незнакомец
 
Сообщения: 5
Зарегистрирован: 19.02.2013 10:43:41

Re: Преобразование изображения из 32-хбитного в 24-хбитное

Сообщение iskander » 27.02.2013 16:43:53

Demi писал(а):Образец:https://dl.dropbox.com/u/19158664/screen.jpg

Полагаю это результат, а исходник?
iskander
энтузиаст
 
Сообщения: 626
Зарегистрирован: 08.01.2012 18:43:34

Re: Преобразование изображения из 32-хбитного в 24-хбитное

Сообщение Demi » 28.02.2013 13:12:14

Код: Выделить всё
test1:=TLazIntfImage.Create(Bitmap.Width,Bitmap.Height);
test:= Bitmap.CreateIntfImage;
ImgFormatDescription.Init_BPP24_B8G8R8_BIO_TTB(Bitmap.Width,Bitmap.Height);
test1.DataDescription:=ImgFormatDescription;
test1.CopyPixels(test);     
bmap:=TBitMap.Create;
bmap.PixelFormat:=pf24bit;
bmap.LoadFromIntfImage(test1); 

if bmap.PixelFormat = pf24bit then
  Form1.Caption:='24';   //   it's work!!!! Form1.Caption=24

if bmap.PixelFormat = pf32bit then
  Form1.Caption:='32';
Demi
незнакомец
 
Сообщения: 5
Зарегистрирован: 19.02.2013 10:43:41

Re: Преобразование изображения из 32-хбитного в 24-хбитное

Сообщение iskander » 28.02.2013 21:38:30

Я имел в виду исходную картинку. :wink:
Полагая, что вам нужно её напечатать я и предложил самый простой вариант - нарисовать картинку на непрозрачном белом фоне. Это должно работать. Можно оформить в маленькую функцию:
Код: Выделить всё
function ConvertTo24Bit(aValue: TBitmap;BackColor: TColor): TBitmap;
begin
  Result := TBitmap.Create;
  with Result do
    if aValue.PixelFormat <> pf24bit then
      begin
        PixelFormat := pf24bit;
        SetSize(aValue.Width,aValue.Height);
        Canvas.FloodFill(0,0,BackColor,fsBorder);
        Canvas.Draw(0,0,aValue);
      end
    else
      Assign(AValue);
end;
iskander
энтузиаст
 
Сообщения: 626
Зарегистрирован: 08.01.2012 18:43:34


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 222

Рейтинг@Mail.ru
cron