Збереження TBitMap у форматі JPEG

Друзі, допоможіть вирішити проблему. У мене є об'єкт 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;

JPG.Compress забули. Ось так працює: procedure tbitmaptojpgfile(bitmap:tbitmap; compressionlevel:byte; jpgfilename:string); var jpg: tjpegimage; begin jpg:=tjpegimage.create; з jpg до три Assign(bitmap); CompressionQuality:=compressionlevel; Smoothing:=true; Compress; SaveToFile(jpgfilename); finally free; end; end;

Пробував. Задавав JPG.CompressionQuality:=100, але не допомагає.

Помітив, що навіть якщо я беру jpg-файл, що свідомо розпізнається, завантажую в TBitMap, а потім зберігаю вказаним способом, новий файл не розпізнається і при цьому "худне" вдвічі при тих же розмірах.

Мабуть у Вас tbitmap містить DDB а не DIB. треба перед збереженням перевіряти: if bitmap.handleType<>bmDIB then //погано лаятися

Повертає BMP.HandleType = bmDIB, тут все гаразд.

А pixelformat який? Спробуйте примусово pf24bit

pf24bit прогресу не дає, хоча розмір файлу зберігається при конверсії JPEG – TBitmap – JPEG.

Знайшов можливу причину: дозвіл 96 пікселів на дюйм, а треба 300.

Підкажіть, як зберегтизображення в JPEG з потрібною роздільною здатністю.

Причина збою - дозвіл зображення, що зберігається. Для нормального розпізнавання потрібно близько 300 dpi, а Delphi завжди зберігає з 96 dpi.