Страница 1 из 1

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

СообщениеДобавлено: 16.07.2012 14:26:46
rustem
Вообщем есть такой код
Код: Выделить всё
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?

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

СообщениеДобавлено: 16.07.2012 14:35:08
sts
надо помнять местами?
bmp.PixelFormat:= pf8bit;
и
bmp.Assign(imgSmall.Picture.Bitmap);

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

СообщениеДобавлено: 16.07.2012 15:09:21
rustem
Это первое что я попробовал. Тогда сохраняется полностью черная картинка, а глубина все равно 24bit :(

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

СообщениеДобавлено: 16.07.2012 15:40:43
Ism
Это давний глюк с черной картинкой, кажется помогало поставить через pixels точку на картинке и тогда она сохранялась, почему, неизвестно.

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

СообщениеДобавлено: 16.07.2012 15:48:14
rustem
Код: Выделить всё
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;   

Теперь сохраняется черная картинка с белой точкой слева сверху.
Научите, может как нибудь по-другому можно сделать?

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

СообщениеДобавлено: 16.07.2012 16:53:20
Ism
Если загрузить картинку в bmp и сохранить , то все будет работать
Видимо imgSmall.Picture.Bitmap в другом формате

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

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

Добавлено спустя 5 минут 7 секунд:
Можно загрузить в TImage и присвоить Assign(Image1.Picture)

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

СообщениеДобавлено: 17.07.2012 08:11:02
rustem
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 и такого же размера.
Может у меня лазарус неправильный?

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

СообщениеДобавлено: 17.07.2012 14:10:42
Ism
Неизвестно , если вы загрузите jpg и попробуете сохранить в bmp , то получите черную картинку. Видимо внутри есть разные типы рисунков , даже если они все отображаются в TImage. Так и неизвестно , это глюк или норма.

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

Как вариант попробуйте BGRABitmap http://wiki.freepascal.org/BGRABitmap

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

СообщениеДобавлено: 18.07.2012 10:13:24
rustem
Спасибо за подсказку буду пробовать.