amin1softco
چهارشنبه 01 آذر 1391, 11:21 صبح
قطعه کد زیر محتویات پنجره که بوسیله glut درست شده به یک بیتمپ میده و قراره این بیتمپ در layered windows (http://msdn.microsoft.com/en-us/library/ms997507.aspx) استفاده بشه ولی یک صفحه مشکی فقط نمایش داده می شود...
این کد مشکلش چیه ؟ که فقط یک صفحه مشکی نشون میده /؟
static std::vector<unsigned char> data(ClientWidth*ClientHeight*4);
static std::vector<unsigned char> data2(ClientWidth*ClientHeight*4);
glReadPixels(0, 0, ClientWidth, ClientHeight, GL_RGBA, GL_UNSIGNED_BYTE, &data[0]);
// m_frameRenderPass.endPass();
// convert the data for windows
int w = ClientWidth;
int h = ClientHeight;
for (int j=0; j<h; ++j) {
int j2 = h-j-1;
unsigned char *p1 = &data[0] + 4*j2*w;
unsigned char *p2 = &data2[0] + 4*j*w;
for (int i=0; i<w; ++i)
{
*p2 = *(p1+2);
*(p2+1) = *(p1+1);
*(p2+2) = *p1;
*(p2+3) = *(p1+3);
p1 += 4;
p2 += 4;
}
}
// copy the image data to the window
HDC dc = GetDC(0);
hMemDC=deviceContext;
HBITMAP hBMP = CreateBitmap(w, h, 1, 32, &data2[0]);
HBITMAP bmpold = (HBITMAP)SelectObject(hMemDC, hBMP);
SIZE sz = {w, h};
POINT ptSrc = {0,0};
Alpha += UpDown ? 1 : -1;
if (Alpha > 255 || Alpha < 0) {
UpDown = !UpDown;
Alpha += UpDown ? 1 : -1;
}
BLENDFUNCTION blend;
blend.BlendOp = AC_SRC_OVER;
blend.BlendFlags = 0;
blend.AlphaFormat =0/*AC_SRC_ALPHA*/;
blend.SourceConstantAlpha = Alpha;
if (!UpdateLayeredWindow(Handle,dc, 0, &sz, hMemDC, &ptSrc, 0, &blend, ULW_ALPHA))
printf("UpdateLayeredWindow failed\n");
SelectObject(hMemDC, bmpold);
DeleteObject(hBMP);
....
این کد مشکلش چیه ؟ که فقط یک صفحه مشکی نشون میده /؟
static std::vector<unsigned char> data(ClientWidth*ClientHeight*4);
static std::vector<unsigned char> data2(ClientWidth*ClientHeight*4);
glReadPixels(0, 0, ClientWidth, ClientHeight, GL_RGBA, GL_UNSIGNED_BYTE, &data[0]);
// m_frameRenderPass.endPass();
// convert the data for windows
int w = ClientWidth;
int h = ClientHeight;
for (int j=0; j<h; ++j) {
int j2 = h-j-1;
unsigned char *p1 = &data[0] + 4*j2*w;
unsigned char *p2 = &data2[0] + 4*j*w;
for (int i=0; i<w; ++i)
{
*p2 = *(p1+2);
*(p2+1) = *(p1+1);
*(p2+2) = *p1;
*(p2+3) = *(p1+3);
p1 += 4;
p2 += 4;
}
}
// copy the image data to the window
HDC dc = GetDC(0);
hMemDC=deviceContext;
HBITMAP hBMP = CreateBitmap(w, h, 1, 32, &data2[0]);
HBITMAP bmpold = (HBITMAP)SelectObject(hMemDC, hBMP);
SIZE sz = {w, h};
POINT ptSrc = {0,0};
Alpha += UpDown ? 1 : -1;
if (Alpha > 255 || Alpha < 0) {
UpDown = !UpDown;
Alpha += UpDown ? 1 : -1;
}
BLENDFUNCTION blend;
blend.BlendOp = AC_SRC_OVER;
blend.BlendFlags = 0;
blend.AlphaFormat =0/*AC_SRC_ALPHA*/;
blend.SourceConstantAlpha = Alpha;
if (!UpdateLayeredWindow(Handle,dc, 0, &sz, hMemDC, &ptSrc, 0, &blend, ULW_ALPHA))
printf("UpdateLayeredWindow failed\n");
SelectObject(hMemDC, bmpold);
DeleteObject(hBMP);
....