Форум: "Media";
Текущий архив: 2004.04.25;
Скачать: [xml.tar.bz2];
ВнизJPEG to BMP Найти похожие ветки
← →
Raki (2004-01-05 21:54) [0]Имеется файл в формате JPEG. Или вариант 2- файл JPEG в ресурсах программы. Его нужно сохранить как BMP файл.
Кто-нибудь может подсказать готовую функцию на WinApi?
← →
VMcL © (2004-01-06 16:59) [1]Готовой функции нет.
← →
Delphi5.01 © (2004-01-07 10:26) [2]Gotovoi funkcii net, no est metod, mne kajetsa vam prosto nado perevesti Jpeg fail v bmb (vozmojno nado progai ego redaktirovat, a jpeg delphi ne mojet redaktirovat)
Vot kod kotori eto sdelaet ochen bisto (dopustimi obratnaia konvertacia)
var
BitMap: TBitMap;
JpegImage: TJPEGImage;
begin
JpegImage:=TJPEGImage.Create;
JpegImage.LoadFromFile("pic.jpg");
BitMap:=TBitMap.Create;
BitMap.Assign(JpegImage);
BitMap.SaveToFile("pic.bmp");
BitMap.Free;
JpegImage.Free;
end;
Jelau udachi
← →
VMcL © (2004-01-08 17:31) [3]>>Delphi5.01 © (07.01.04 10:26) [2]
Напомню: "готовую функцию на WinApi"
← →
марсианин © (2004-01-08 22:42) [4]на АПИ никак хотя это кажется странным...
можно использовать всякие ДЛЛ-ки всяких производителей
напр Intel jpeg library (пример см. FastLIB на DelphiGFX), www.ijg.org
← →
Igit © (2004-01-11 17:23) [5]Function LoadIPic(src : string;var IPict:IPicture) : boolean;
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;
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;
PBmp.SaveToFile(dest);
Pbmp.Free;
IPict.Release();
end;
← →
Raki (2004-01-12 19:41) [6]Упс. Igit, я немного не смыслю на столь высоком уровне программирования: не мог бы ты мне объяснить, что мне нужно еще дописать в код программы, чтобы не появлялось мессаг,типа:
Undeclared Identifer:"IPicture"
Undeclared Identifer:"IStream"
Undeclared Identifer:"CreateStreamOnHGlobal" и т.д
← →
Igit © (2004-01-12 22:11) [7]Давай я тебе вышлю рабочий пример
← →
Igit © (2004-01-12 22:15) [8]в секцию uses добавь Ole2, OleCtl;
← →
Raki (2004-01-24 00:27) [9]Большущий тебе Thanks. Извини, что не ответил раньше: не мог.
Страницы: 1 вся ветка
Форум: "Media";
Текущий архив: 2004.04.25;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.037 c