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

Вниз

Как преобразовать jpg в bmp, при этом используя минимум ресурсов?   Найти похожие ветки 

 
incm   (2005-09-19 19:46) [0]

Есть ли какая апишная функция для таких дел? Нужно дабы програмка была маленькой и не использовала много ресурсов, а так же что бы делала это быстро.

Подскажите, кто что знает на эту тему.


 
Antonn ©   (2005-09-20 08:37) [1]

jpeg := TJPEGImage.Create;
 try
   jpeg.CompressionQuality := 100;
   jpeg.LoadFromFile(путь к файлу);
   bmp := TBitmap.Create;
   try
     bmp.Assign(jpeg);

     //вот тут и bmp

   finally
     bmp.Free
   end;
finally
  jpeg.Free
end;


 
Igi   (2005-09-20 09:44) [2]

Я писал подобную функцию... преобразует гифы и жпеги в бмб без использования сторонних модулей, щас пороюсь, может найду


 
Igi   (2005-09-20 09:50) [3]

Эта функция загружает картинку в IPicture, следущая функция софраняет её в бмб. Требуется модули Ole2 и OleCtl. Если в программе используется модуль ActiveX (а он несовместим с Ole2) то нужно раскоментировать строчку IID_IPicture : TGUID = "{7BF80980-BF32-101A-8BBB-00AA00300CAB}";
и не добавлять Ole2 и OleCtl. Ну и чуток подправить код. Точно уже не помню, писал года 1.5 назад.

Function LoadIPic(src : string;var IPict:IPicture) : boolean;
// загрузка картинки в IPicture
//const
//   IID_IPicture : TGUID = "{7BF80980-BF32-101A-8BBB-00AA00300CAB}";
var
  _hFile : THANDLE;
  szFile : string;
  dwFileSize : DWORD;
  dwBytesRead : DWORD;
  bRead : BOOL;
  IStm: IStream;
  _hGlobal : HGLOBAL;
  pvData : Pointer;

begin
  Result := true;
  szFile:=src;
  // open file
  _hFile :=CreateFile(PChar(szFile), GENERIC_READ, 0, nil, OPEN_EXISTING, 0, 0);
  // get file size
  dwFileSize := GetFileSize(_hFile, NIl);
  pvData := NiL;
  // alloc memory based on file size
  _hGlobal := GlobalAlloc(GMEM_MOVEABLE, dwFileSize);
  if _hGlobal = 0 then
     begin
         //Could not allocate memory for image
         CloseHandle(_hFile);
         Result := false;
         exit;
     end;
 pvData := GlobalLock(_hGlobal);
 if pvData = NIL then
     begin
         //Could not lock memory for image
         GlobalUnlock(_hGlobal);
         CloseHandle(_hFile);
         Result := false;
         exit;
     end;
 dwBytesRead := 0;
 // read file and store in global memory
 bRead := ReadFile(_hFile, pvData^, dwFileSize, dwBytesRead, NIL);
 GlobalUnlock(_hGlobal);
 CloseHandle(_hFile);
 if not bRead   then
     begin
         //Could not read file
         Result := false;
         exit;
     end;

 istm := NiL;
 // create IStream* from global memory
 CreateStreamOnHGlobal(_hGlobal, TRUE, istm);
 OleLoadPicture(istm, dwFileSize, FALSE, IID_IPicture, IPict);
 GlobalUnlock(_hGlobal);
 GlobalFree(_hGlobal);
end;


Сохраняем картинку в бмп. Писал на KOL - но думаю под API переписать ничего сложного нет.
Procedure Convert(src, dest : string);
var
  IPict:IPicture;
  oh : OLE_HANDLE;
  PBmp : PBitmap;
begin
  if not LoadIPic(src, IPict) then exit;
  PBmp := NewBitmap(0, 0);
  Ipict.get_Handle(oh);
  PBmp.Handle := oh;
  // изображение 32 битное
  PBmp.PixelFormat := pf32bit;
  // сохраняем
  PBmp.SaveToFile(dest);
  // все очищаем
  Pbmp.Free;
  IPict.Release();
end;


 
XProger ©   (2005-09-20 22:11) [4]

И ещё этот кошмарик не работает в Win 9x :)


 
Igi   (2005-09-21 19:10) [5]

Все прекрасно работает!


 
XProger ©   (2005-09-22 01:10) [6]

Странно, у меня на Win 98 se не грузит jpg и gif :)


 
Igi   (2005-09-28 10:12) [7]

Вот моя программа, с исходниками - все работает
http://igisoft.ru/ChWall.html


 
Sapersky   (2005-09-29 12:31) [8]

Грузить можно проще:

function SHCreateStreamOnFileA(FileName: PChar; grfMode: DWORD;var stream: IStream):HResult; stdcall; external "shlwapi.dll" name "SHCreateStreamOnFileA";

SHCreateStreamOnFileA(PChar(FileName), 0, Stream);
OleLoadPicture(Stream, FileSize(FileName), false, IID_IPicture, Pic);

( http://www.homm86.narod.ru )



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

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

Наверх




Память: 0.49 MB
Время: 0.04 c
14-1131601282
КаПиБаРа
2005-11-10 08:41
2005.12.04
Сергей Довлатов


2-1132050169
User52
2005-11-15 13:22
2005.12.04
Нужна помощь, Вставка компонента


3-1129634132
Juice
2005-10-18 15:15
2005.12.04
dbExpress - хорошо или плохо ?


2-1132294114
Baraban
2005-11-18 09:08
2005.12.04
MyDac


1-1131298268
Volf_555
2005-11-06 20:31
2005.12.04
Закрытие PopupMenu