c++怎么样将PPT转为viedeo或内存数据

C++语言 码拜 7年前 (2015-11-28) 1029次浏览
怎么样解析PPT?
把PPT转为内存数据流,可以使用程序进行播放(也就是可以转为一张一张的图片,但是本人不需要保存这些图片到硬盘,每一张图片对应一个Buffer)。
或怎么样转为视频格式?
解决方案:10分
解决方案:10分
解决方案:10分
在本ID眼里,写几行到几十万行代码实现某个功能和用WinExec(“外部命令行工具.exe 命令行参数 …”,SW_HIDE);调用外部命令行工具实现同样功能没有本质区别。
解决方案:10分
在PowerPoint 2003中开始记录宏,手动完成所需功能,结束记录宏,按Alt+F11键,查看刚才记录的宏对应的VBA代码。
仅供参考:

public sub InTurn()
dim p as integer
dim i as integer
dim n as integer
    n=ActivePresentation.Slides.Count
    for i=1 to n
        debug.print ActivePresentation.Slides(i).SlideShowTransition.EntryEffect
    next
end sub
解决方案:20分
http://dag.wiee.rs/home-made/unoconv/
解决方案:10分
## First converts your presentation to PDF
unoconv -f pdf presentation.ppt
## Then convert your PDF to jpg
convert presentation.pdf presentation_%03d.jpg
解决方案:10分
调用外部程序跟调用OLE,在做这个事情上没有区别,你不对用户暴露pdf中间文件,谁也不知道你中间经过多少步骤。
对你而言,要提供的是个服务,输入是ppt,输出是image,至于你服务内部的事情,服务的使用者是不care的。
假如需要实现stream的效果,边转边用,可能需要继续研究下解析ppt的库了,看它能否支持流式计算。
最坏的情况,就是本人一页页的读ppt,内存里本人render出来,再序列化成image,工作量比较大。
解决方案:10分
说到流,参考下面:

#pragma comment(lib,"user32")
#pragma comment(lib,"gdi32")
#include <stdlib.h>
#include <stdio.h>
#include <io.h>
#include <conio.h>
#include <windows.h>
#include <atlimage.h>
#include <objidl.h>
void DrawPic(HDC hdc,char *buf,int len) {
    HGLOBAL hMem=GlobalAlloc(GMEM_FIXED,len);
    BYTE* pMem=(BYTE*)GlobalLock(hMem);
    memcpy(pMem,buf,len);
    IStream* pStream;
    HRESULT hr=CreateStreamOnHGlobal(pMem,FALSE,&pStream);
    CImage img;
    img.Load(pStream);
    img.Draw(hdc,CPoint(0,0));
    img.Destroy();
    pStream->Release();
    GlobalUnlock(hMem);
    GlobalFree(hMem);
}
//HWND WINAPI GetConsoleWindow();
void HideTheCursor() {
    CONSOLE_CURSOR_INFO cciCursor;
    HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
    if (GetConsoleCursorInfo(hStdOut, &cciCursor)) {
        cciCursor.bVisible = FALSE;
        SetConsoleCursorInfo(hStdOut, &cciCursor);
    }
}
void ShowTheCursor() {
    CONSOLE_CURSOR_INFO cciCursor;
    HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
    if (GetConsoleCursorInfo(hStdOut, &cciCursor)) {
        cciCursor.bVisible = TRUE;
        SetConsoleCursorInfo(hStdOut, &cciCursor);
    }
}
int main() {
    HWND  hwnd;
    HDC   hdc;
    HFONT hfont;
    HBITMAP hbm;
    HDC hdcBits;
    BITMAP bm;
    system("color F0");
    system("cls");
    HideTheCursor();
    hwnd  = GetConsoleWindow();
    hdc   = GetDC(hwnd);
    hfont = CreateFont(48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "华文楷体");
    SelectObject(hdc,hfont);
    TextOut(hdc,10,10,"这是泡泡",8);
    DeleteObject(hfont);
    hbm=(HBITMAP)LoadImage(0,"C:\Windows\Soap Bubbles.bmp",IMAGE_BITMAP,0,0,LR_DEFAULTSIZE|LR_LOADFROMFILE);
    if (hbm) {
        hdcBits = CreateCompatibleDC(hdc);
        GetObject (hbm, sizeof(BITMAP), &bm);
        SelectObject(hdcBits,hbm);
        BitBlt(hdc,200,10,bm.bmWidth, bm.bmHeight,hdcBits,0,0,SRCCOPY);
        DeleteDC(hdcBits);
        DeleteObject(hbm);
    }
    getch();
    FILE *f;
    f=fopen("c:\new\tmp.jpg","rb");
    if (f) {
        int fl=filelength(fileno(f));
        char *buf=(char *)malloc(fl);
        if (buf) {
            fread(buf,fl,1,f);
        }
        fclose(f);
        if (buf) {
            DrawPic(hdc,buf,fl);
            free(buf);
        }
    }
    ReleaseDC(hwnd,hdc);
    getch();
    system("color 07");
    system("cls");
    ShowTheCursor();
    return 0;
}

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明c++怎么样将PPT转为viedeo或内存数据
喜欢 (0)
[1034331897@qq.com]
分享 (0)