Форум: "WinAPI";
Текущий архив: 2005.12.04;
Скачать: [xml.tar.bz2];
ВнизКак преобразовать 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 вся ветка
Форум: "WinAPI";
Текущий архив: 2005.12.04;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.037 c