Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.10.29;
Скачать: CL | DM;

Вниз

Сохранение TBitMap в формате JPEG   Найти похожие ветки 

 
kmi   (2006-03-27 12:52) [0]

Друзья, помогите решить проблемку. У меня есть объект 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-файл.


 
SamBrook ©   (2006-03-27 13:59) [1]

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;



 
kmi   (2006-03-27 15:44) [2]

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


 
kmi   (2006-03-27 15:52) [3]

Заметил, что даже если я беру заведомо распознаваемый jpg-файл, загружаю в TBitMap, а затем сохраняю указанным способом, новый файл не распознается и при этом "худеет" вдвое при тех же размерах.


 
SamBrook ©   (2006-03-27 16:32) [4]

Видимо у Вас tbitmap содержит DDB а не DIB.
Т.Е. надо перед сохранением проверять:

if bitmap.handleType<>bmDIB then //скверно ругаться


 
kmi   (2006-03-27 17:00) [5]

Возвращает BMP.HandleType = bmDIB, здесь все в норме.


 
SamBrook ©   (2006-03-27 17:12) [6]

А pixelformat какой?
Попробуйте принудительно pf24bit


 
kmi   (2006-03-27 21:12) [7]

pf24bit прогресса не дает, хотя размер файла сохраняется при конверсии JPEG - TBitmap - JPEG.


 
kmi   (2006-03-28 11:26) [8]

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

Подскажите, как сохранить изображение в JPEG с нужным разрешением.


 
kmi   (2006-03-28 17:54) [9]

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


 
kmi   (2006-03-28 23:02) [10]

Решение см. http://delphimaster.net/view/8-1143532496/



Страницы: 1 вся ветка

Текущий архив: 2006.10.29;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.049 c
2-1160458972
Alina
2006-10-10 09:42
2006.10.29
Базы в Делфи.


2-1160472952
horse
2006-10-10 13:35
2006.10.29
Как изменить языковую раскладку клавиатуры?


15-1160459701
Александр Иванов
2006-10-10 09:55
2006.10.29
Настройка Visual Source Safe 6.0


15-1160481444
Petr V. Abramov
2006-10-10 15:57
2006.10.29
Oracle Developer vs Delphi


2-1160738276
Фесс
2006-10-13 15:17
2006.10.29
Стек и как с ним работать