Страница 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:58:27
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
Спасибо за подсказку буду пробовать.