Главная страница
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.028 c
2-1160677553
Still Swamp
2006-10-12 22:25
2006.10.29
Как приторочить иконку для моих компонетов


2-1161074883
Dmitry_177
2006-10-17 12:48
2006.10.29
Запись в файл в DLL, THandle файла в разных процессах


15-1159976889
XProger
2006-10-04 19:48
2006.10.29
Задачки по Delphi


15-1160129427
Gata S
2006-10-06 14:10
2006.10.29
Как узнать к каким файлам обращается программа?


1-1158591285
rub67
2006-09-18 18:54
2006.10.29
TRemotable и управление памятью