Глубина цвета в bmp или image

Форум для изучающих FPC и их учителей.

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

Глубина цвета в bmp или image

Сообщение rustem » 16.07.2012 14:26:46

Вообщем есть такой код
Код: Выделить всё
procedure TfrmMain.SpeedButton2Click(Sender: TObject);
var
  bmp: TBitmap;
begin
  bmp:= TBitmap.Create;
  bmp.PixelFormat:= pf8bit;
  bmp.Assign(imgSmall.Picture.Bitmap);
  bmp.SaveToFile('345.bmp');
  bmp.Free;
end; 

Только почему он не работает??? после сохранения все равно картинка 24bit?
rustem
незнакомец
 
Сообщения: 9
Зарегистрирован: 16.04.2012 09:00:25

Re: Глубина цвета в bmp или image

Сообщение sts » 16.07.2012 14:35:08

надо помнять местами?
bmp.PixelFormat:= pf8bit;
и
bmp.Assign(imgSmall.Picture.Bitmap);
sts
постоялец
 
Сообщения: 431
Зарегистрирован: 04.04.2008 12:15:44
Откуда: Тольятти

Re: Глубина цвета в bmp или image

Сообщение rustem » 16.07.2012 15:09:21

Это первое что я попробовал. Тогда сохраняется полностью черная картинка, а глубина все равно 24bit :(
rustem
незнакомец
 
Сообщения: 9
Зарегистрирован: 16.04.2012 09:00:25

Re: Глубина цвета в bmp или image

Сообщение Ism » 16.07.2012 15:40:43

Это давний глюк с черной картинкой, кажется помогало поставить через pixels точку на картинке и тогда она сохранялась, почему, неизвестно.
Ism
энтузиаст
 
Сообщения: 908
Зарегистрирован: 06.04.2007 17:36:08

Re: Глубина цвета в bmp или image

Сообщение rustem » 16.07.2012 15:48:14

Код: Выделить всё
procedure TfrmMain.SpeedButton2Click(Sender: TObject);
var
  bmp: TBitmap;
begin
  bmp:= TBitmap.Create;
  bmp.Assign(imgSmall.Picture.Bitmap);
  bmp.PixelFormat:= pf8bit;
  bmp.Canvas.Pixels[0,0]:=clWhite;
  bmp.SaveToFile('345.bmp');
  bmp.Free;
end;   

Теперь сохраняется черная картинка с белой точкой слева сверху.
Научите, может как нибудь по-другому можно сделать?
rustem
незнакомец
 
Сообщения: 9
Зарегистрирован: 16.04.2012 09:00:25

Re: Глубина цвета в bmp или image

Сообщение Ism » 16.07.2012 16:53:20

Если загрузить картинку в bmp и сохранить , то все будет работать
Видимо imgSmall.Picture.Bitmap в другом формате

TBitmap понимает только один формат bmp

Видимо надо пробовать через LoadFromStream

Добавлено спустя 5 минут 7 секунд:
Можно загрузить в TImage и присвоить Assign(Image1.Picture)
Ism
энтузиаст
 
Сообщения: 908
Зарегистрирован: 06.04.2007 17:36:08

Re: Глубина цвета в bmp или image

Сообщение rustem » 17.07.2012 08:11:02

Ism писал(а):Можно загрузить в TImage и присвоить Assign(Image1.Picture)

Сохраняется черная картинка. а под линем так еще и ошибку выдает.
Ism писал(а):Видимо imgSmall.Picture.Bitmap в другом формате

Как это понять? Смотрим в код
Код: Выделить всё
property Bitmap: TBitmap read GetBitmap write SetBitmap;

Ism писал(а):LoadFromStream

Этой процедурой нужно загружать в TImage или в bmp?
Ism писал(а):Если загрузить картинку в bmp и сохранить , то все будет работать

Код: Выделить всё
procedure TfrmMain.SpeedButton2Click(Sender: TObject);
var
  bmp: TBitmap;
begin
  bmp:= TBitmap.Create;
  bmp.LoadFromFile('123.bmp');
  bmp.PixelFormat:= pf8bit;
  bmp.SaveToFile('345.bmp');
  bmp.Free;
end;     

Получается аналогичная картинка 24bit и такого же размера.
Может у меня лазарус неправильный?
rustem
незнакомец
 
Сообщения: 9
Зарегистрирован: 16.04.2012 09:00:25

Re: Глубина цвета в bmp или image

Сообщение Ism » 17.07.2012 14:10:42

Неизвестно , если вы загрузите jpg и попробуете сохранить в bmp , то получите черную картинку. Видимо внутри есть разные типы рисунков , даже если они все отображаются в TImage. Так и неизвестно , это глюк или норма.

Поэтому надо сохранить поток TBitmap и детально разобрать в чем подвох. Но это задача разработчиков

Как вариант попробуйте BGRABitmap http://wiki.freepascal.org/BGRABitmap
Ism
энтузиаст
 
Сообщения: 908
Зарегистрирован: 06.04.2007 17:36:08

Re: Глубина цвета в bmp или image

Сообщение rustem » 18.07.2012 10:13:24

Спасибо за подсказку буду пробовать.
rustem
незнакомец
 
Сообщения: 9
Зарегистрирован: 16.04.2012 09:00:25


Вернуться в Обучение Free Pascal

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

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

Рейтинг@Mail.ru