![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Сохранение TBitMap в формате JPEG [D7, Win2k, WinXP]
kmi © (2006-03-27 12:52:00)Друзья, помогите решить проблемку. У меня есть объект TBitMap, изображение которого нужно сохранить в JPEG с качеством не ниже 90, затем распознать это изображение.
Я делаю так:
var
Bmp: TBitMap;
JPG: TJPEGImage;
Bmp := MCD.GetBitmap; // получаю изображение
if (Bmp = nil) // проверяю
then
begin
MCD.ShowErrorMsg('Ошибка');
Exit;
end;
JPG := TJPEGImage.Create; // модуль JPEG указан в uses
try
JPG.Assign(BMP); // присваиваю данные из TBitMap
JPG.PixelFormat := jf24Bit; // указываю формат
JPG.SaveToFile(AppPath + 'Images\Psp.jpg'); // сохраняю
finally
JPG.Free;
end;
Файл сохраняется, открывается в любом редакторе, но... вызывает ошибку при распознании. Подскажите, в чем ошибка или како другой способ сохранения TBitMap в JPEG-файл.
kmi (2006-03-28 23:02:00) [1]Решение см. http://www.delphimaster.ru/cgi-bin/forum.pl?id=1143532496&n=7
kmi (2006-03-28 17:54:00) [2]Причина сбоя - разрешение сохраняемого изображения. Для нормального распознания нужно около 300 dpi, а Delphi сохраняет всегда с 96 dpi.
kmi (2006-03-28 11:26:00) [3]Нашел возможную причину: разрешение 96 точек на дюйм, а надо 300.
Подскажите, как сохранить изображение в JPEG с нужным разрешением.
kmi (2006-03-27 21:12:00) [4]pf24bit прогресса не дает, хотя размер файла сохраняется при конверсии JPEG - TBitmap - JPEG.
SamBrook (2006-03-27 17:12:00) [5]А pixelformat какой?
Попробуйте принудительно pf24bit
kmi (2006-03-27 17:00:00) [6]Возвращает BMP.HandleType = bmDIB, здесь все в норме.
SamBrook (2006-03-27 16:32:00) [7]Видимо у Вас tbitmap содержит DDB а не DIB.
Т.Е. надо перед сохранением проверять:
if bitmap.handleType<>bmDIB then //скверно ругаться
kmi (2006-03-27 15:52:00) [8]Заметил, что даже если я беру заведомо распознаваемый jpg-файл, загружаю в TBitMap, а затем сохраняю указанным способом, новый файл не распознается и при этом "худеет" вдвое при тех же размерах.
kmi (2006-03-27 15:44:00) [9]Пробовал. Задавал JPG.CompressionQuality:=100, но все равно не помогает.
SamBrook (2006-03-27 13:59:00) [10]JPG.Compress забыли.
Вот так работает:
procedure tbitmaptojpgfile(bitmap:tbitmap;
compressionlevel:byte;
jpgfilename:string);
var jpg:tjpegimage;
begin
jpg:=tjpegimage.create;
with jpg do
try
Assign(bitmap);
CompressionQuality:=compressionlevel;
Smoothing:=true;
Compress;
SaveToFile(jpgfilename);
finally
free;
end;
end;