Збереження 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.