我想为 Adobe Premiere 编写视频过滤器,我需要在输出视频帧中打印/绘制/渲染一些文本。
调查adobe Premiere cs4 sdk我找不到快速答案 - 有可能吗?
请提供一些样品!
谢谢!
我想为 Adobe Premiere 编写视频过滤器,我需要在输出视频帧中打印/绘制/渲染一些文本。
调查adobe Premiere cs4 sdk我找不到快速答案 - 有可能吗?
请提供一些样品!
谢谢!
我将尝试实施的一些策略:
更新 替代文本 http://img413.imageshack.us/img413/6201/adobe.jpg 工作示例,使用 SDK 中的 Simple_Video_Filter 示例...
在 xFilter(短选择器,VideoHandle theData)函数的开头创建带有文本的位图:
TCHAR szBuffer[50] = {0};
RECT rect;
HDC hdc = GetDC(NULL);
int iLength = 0;
iLength = wsprintf(szBuffer, "Hello World!");
BITMAPINFO bmInfo;
memset(&bmInfo.bmiHeader,0,sizeof(BITMAPINFOHEADER));
bmInfo.bmiHeader.biSize=sizeof(BITMAPINFOHEADER);
bmInfo.bmiHeader.biWidth=100;
bmInfo.bmiHeader.biHeight=15;
bmInfo.bmiHeader.biPlanes=1;
bmInfo.bmiHeader.biBitCount = 32;
bmInfo.bmiHeader.biCompression = BI_RGB;
//create a temporary dc in memory.
HDC pDC = GetDC(0);
HDC TmpDC=CreateCompatibleDC(pDC);
//create a new bitmap and select it in the memory dc
BYTE *pbase;
HBITMAP TmpBmp=CreateDIBSection(pDC, &bmInfo,DIB_RGB_COLORS,(void**)&pbase,0,0);
HGDIOBJ TmpObj=SelectObject(TmpDC,TmpBmp);
SetRect(&rect, 0, 0, 100, 15);
DrawText(TmpDC, szBuffer, iLength, &rect, 32);
在设置过滤器的中间,而不是
redSource = (redSource + redAdd) & 0x000000ff;
greenSource = (greenSource + greenAdd) & 0x000000ff;
blueSource = (blueSource + blueAdd) & 0x000000ff;
采用
int x = vert;
int y = horiz;
if(x < 215 && y < 300)
{
COLORREF c = GetPixel(TmpDC,y-200, 215 - x);
if(0 == ((int)GetRValue(c)+(int)GetGValue(c)+(int)GetBValue(c)))
{
redSource =255;
greenSource =255;
blueSource =255;
}
}
并在功能清理内存结束时
SelectObject(TmpDC,TmpObj);
DeleteDC(TmpDC);
PS [有一天:)] 需要将位图存储在内存中一次,而不是每帧创建一次...