Ребята, поделитесь кто-то исходником функции или модуля на delphi ( без vcl и левых компонентов) для конвертирования bmp в gif или png или jpg . Короче что бы сильно укоротить размер файла изображения, а то 3.5 метра никак не катит, а времени писать что-то свое нету
http://www.imagemagick.org - скомпиль в dll. Делает всё. Ну или бегом на делфи сайты, типа torry delphi pages.
та искал, нифига не подходит, длл таскать в проге мне не катит. Может можно как-то урезать бмп , разрешение, цвет ? качество мне не очень важно. Что бы где-то на 200 кб получилось изображение
Как сказал: punxer ГДИ+ Код (Text): function GetEncoderClsid(format: string; var pClsid: TGUID): integer; var num, size, il: DWord; ImageCodecInfo: PImageCodecInfo; Type ArrIMgInf = array of TImageCodecInfo; begin num := 0; size := 0; result := -1; GdipGetImageEncodersSize(num, size); if (size = 0) then exit; GetMem(ImageCodecInfo, size); if GdipGetImageEncoders(num, size, ImageCodecInfo) = Ok then for il := 0 to num - 1 do begin if (ArrIMgInf(ImageCodecInfo)[il].MimeType = format) then begin pClsid := ArrIMgInf(ImageCodecInfo)[il].Clsid; result := il; Break; end; end; FreeMem(ImageCodecInfo, size); end; function Bitmap2Jpeg(Filename: PChar): Boolean; var image: TGPImage; Encoder_GUID: TGUID; Stream: IStream; hMem,hFile,BR: DWORD; MemPtr: Pointer; begin ZeroMemory(@Encoder_GUID,sizeof(Encoder_GUID)); result := GetEncoderClsid('image/jpeg',Encoder_GUID) > -1; if not Result then exit; hFile := CreateFileA(Filename,GENERIC_ALL,3,nil,OPEN_EXISTING,0,0); Result := hFile <> INVALID_HANDLE_VALUE; if not Result then exit; BR := GetFileSize(hFile,nil); hMem := LocalAlloc(GMEM_MOVEABLE,BR); Result := hMem <> 0; if not Result then exit; MemPtr := LocalLock(hMem); if MemPtr = nil then begin LocalFree(hMem); CloseHandle(hFile); exit; end; result := ReadFile(hFile,MemPtr^,GetFileSize(hFile,nil),BR,nil); if not Result then begin LocalUnlock(hMem); LocalFree(hMem); exit; end; LocalUnlock(hMem); CloseHandle(hFile); result := CreateStreamOnHGlobal(hMem,true,Stream) = S_OK; if not Result then begin LocalFree(hMem); CloseHandle(hFile); exit; end; image := TGPImage.Create(Stream); Result := image.GetLastStatus = Ok; if not Result then begin LocalFree(hMem); exit; end; result := image.Save(Filename,Encoder_GUID) = Ok; image.Free; LocalFree(hMem); end; Думаю там все понятно.
http://www.cg.tuwien.ac.at/~knapp/graphix_old/gxframe.html http://logicnet.dk/lib/ http://delphi.pjh2.de/articles/graphic/png.php