Конференция "Corba" » Как сохранить то, что загрузила OleLoadPicture? [Delphi]
 
  • Alex (05.06.08 08:39) [0]
    Сабж.
    Гружу картинку так:
    uses
     Windows, Messages, ActiveX
    const
     IID_IPicture  : TGUID = '{7BF80980-BF32-101A-8BBB-00AA00300CAB}';

    var
     gpPicture : IPicture = NIL;
     PicFileName   : String = 'pic.gif';  

    //----------------------------------------------------------

    procedure LoadPictureFile(Name : String);
    var
     aFile     : HFILE;
     pstm      : IStream;
     pvData    : Pointer;
     dwBytesRead   : DWORD;
     dwFileSize    : DWORD;
     Global    : HGLOBAL;
     i:longint;
    begin

     aFile := CreateFile(PChar(Name), GENERIC_READ, 0, NIL, OPEN_EXISTING, 0, 0);
     if aFile = INVALID_HANDLE_VALUE then
       Exit;
     dwFileSize := GetFileSize(aFile, NIL);
     if dwFileSize = -1 then
       Exit;

     pvData := NIL;

     Global := GlobalAlloc(GMEM_MOVEABLE, dwFileSize);
     if Global = 0 then
     begin
       CloseHandle(aFile);
       Exit;
     end;

     pvData := GlobalLock(Global);
     if pvData = NIL then
       Exit;

     dwBytesRead := 0;

     if not ReadFile(aFile, pvData^, dwFileSize, dwBytesRead, NIL) then
       Exit;

     GlobalUnlock(Global);
     CloseHandle(aFile);

     pstm := NIL;

     if CreateStreamOnHGlobal(Global, True, pstm) <> S_OK then
       Exit;
     if pstm = NIL then
       Exit;

     if Assigned(gpPicture) then
       gpPicture := NIL;
     if OleLoadPicture(pstm, dwFileSize, False, IID_IPicture, gpPicture) <> S_OK then
     begin
       pstm := NIL;
       Exit;
     end;
     GlobalFree(Global);
     pstm := NIL;
    end;


    Теперь ее надо сохранить в файл BMP. Как?
    Знаю, что это кажется делается ф-цией OleSavePictureFile, но как именно?!
  • Dmitry S © (05.06.08 11:49) [1]
    Оле может загружать картинку проще:

    function OleLoadPictureFile(varFileName: TVariantArg;
     var lpdispPicture: IDispatch): HResult; stdcall;
     external 'oleaut32.dll';

    OleLoadPictureFile(FileName, PicD);
    PicD.QueryInterface(IPicture, gpPicture);
  • Dmitry S © (05.06.08 12:02) [2]
    А что непонятного в OleSavePictureFile??
  • Alex (05.06.08 14:06) [3]
    Эээ... Типа я тормоз?! Ща проверю... O_o
  • Alex (05.06.08 14:30) [4]
    Хм, а как? ))
    Первое че, что пришло на ум:

    var
     Pic:IDispatch;
    begin
     OleLoadPictureFile('c:\pic.gif', Pic);
     OleSavePictureFile(Pic,'c:\pic.bmp');
    end;


    Не работает.
 
Конференция "Corba" » Как сохранить то, что загрузила OleLoadPicture? [Delphi]
Есть новые Нет новых   [120360   +40][b:0][p:0.002]