내 기본 확장 방송에서 스크린 샷을 만들고 싶습니다. 나는 이것을 동기식으로 처리했다. 이제 스레드에서 비동기식 (WINAPI CreateThread 사용)하고 싶습니다.기본 네이티브 확장 : 스레드 (winapi)에서 비트 맵 데이터를 as3으로 전달합니다.
스레드에서 새 비트 맵 데이터를 만들고 각 픽셀의 색을 설정합니다. 하지만 지금 내 질문은 :
어떻게 스레드에서 만든 bitmapdata를 다시 actionscript로 전달합니까? 도움을
이DWORD WINAPI threadScreenshot(LPVOID data)
{
int32_t iWidth, iHeight, iOffsetX, iOffsetY;
iWidth = _iSsWidth;
iHeight = _iSsHeight;
iOffsetX = _iSsOffsetX;
iOffsetY = _iSsOffsetY;
FREObject freWidth;
FRENewObjectFromUint32(uint32_t(iWidth), &freWidth);
FREObject freHeight;
FRENewObjectFromUint32(uint32_t(iHeight), &freHeight);
FREObject freTransparent;
FRENewObjectFromBool(uint32_t(0), &freTransparent);
FREObject freFillColor;
FRENewObjectFromUint32(uint32_t(0xFF0000), &freFillColor);
// first get those values from imaage
FREObject freArguments[4] = { freWidth, freHeight, freTransparent, freFillColor };
// create an instance of BitmapData
FREObject freoBitmapData;
FRENewObject((uint8_t *)"flash.display.BitmapData", 4, freArguments, &freoBitmapData, NULL);
// now acquire the bitmap data in order to manipulate it
FREBitmapData freBitmapData;
FREAcquireBitmapData(freoBitmapData, &freBitmapData);
//***
//Grab screenshot data and fill bitmapdata...
//**.
// Tell Flash which region of the bitmapData changes (all of it here)
FREInvalidateBitmapDataRect(freoBitmapData, 0, 0, freBitmapData.width, freBitmapData.height);
// Release our control over the bitmapData
FREReleaseBitmapData(freoBitmapData);
//Dispatch event:
FREDispatchStatusEventAsync(oCtxThreadScreenshot, (const uint8_t *)"onMsg", (const uint8_t *)"screenshot_done");
return 0;
}
감사 : 스레드 자체가 여기
FREObject getScreenShotAsynchronous(FREContext ctx, void* funcData, uint32_t argc, FREObject argv[])
{
FREGetObjectAsInt32(argv[1], &_iSsWidth);
FREGetObjectAsInt32(argv[2], &_iSsHeight);
FREGetObjectAsInt32(argv[3], &_iSsOffsetX);
FREGetObjectAsInt32(argv[4], &_iSsOffsetY);
//Context ref for thread:
oCtxThreadScreenshot = ctx;
//Create thread:
bRunThreadScreenshot = true;
hThreadScreenshot = CreateThread(NULL, 0, threadScreenshot, 0, 0, &dwThreadScreenshotID);
CloseHandle(hThreadScreenshot);
return NULL;
}
을 그리고 다음은
나는 스레드를 만들!
은 [FREAcquireBitmapData] (http://help.adobe.com/en_US/air/extensions/WSb464b1207c184b14-62b8e11f12937b86be4-7ff8.html) -'FRE_WRONG_THREAD 방법이 아닌 다른 스레드에서 호출 된 하나의 런타임에 네이티브 확장 함수에 대한 미해결 호출이 있습니다.'이 오류가 발생하지 않은 상태에서 스레드가 작동하는 코드는'FRE_WRONG_THREAD'입니까? – RbMm
나는 그런 오류를 얻지 않는다. "screenshot_done"이벤트가 발송 중입니다. – Ilyssis
임시 파일로 저장 한 다음 as3 –