Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.10.24;
Скачать: CL | DM;

Вниз

Подскажите как из IDirectDrawSurface7 получить TBitmap?   Найти похожие ветки 

 
NOX   (2004-07-29 12:27) [0]

Подскажите пожалуйста как поверхность IDirectDrawSurface7 перевести в тип TBitmap. Пробовал через прямой
доступ к памяти по-пиксельно копировать цвета (16 бит), но получается просто белый фон почему-то. Может есть готовые средства?
Вот мой код:

var ddsd : TDDSurfaceDesc2;
    hRet : HResult;
    i, j, wrkColor : word;
begin
wrkBMP.Width:=32;
wrkBMP.Height:=32;
ZeroMemory(@ddsd, SizeOf(ddsd));
hRet:=ImgSurf.Lock(nil, ddsd, DDLOCK_WAIT, 0);
if Failed(hRet) then Exit;
for i:=0 to 31 do
 for j:=0 to 31 do
  begin
   wrkColor:=PWORD( Integer(ddsd.lpSurface) + j * dsd.lPitch   + i * 2 )^;
   wrkBMP.Canvas.Pixels[i,j]:=RGB(wrkColor and $1f,
                                 (wrkColor shr 5) and $3f,
                                 (wrkColor shr 11) and $1f);
  end;
ImgSurf.Unlock(nil);


Спасибо.


 
NOX   (2004-07-29 19:29) [1]

Неужели никто не знает???


 
cyborg ©   (2004-07-29 20:02) [2]

Surface.GetDC(DC)
Surface.ReleaseDC(DC);

С ними пляши


 
NOX   (2004-07-30 11:52) [3]

Вот мой код, но работает он что-то плохо, файл не создаётся.

ZeroMemory(@ddsd, SizeOf(ddsd));
hRet:=ImgSurf.GetSurfaceDesc(ddsd);
if hRet <> DD_OK then Exit;
ImgSurf.GetDC(DC);
wrkBMP.Width:=ddsd.dwWidth;
wrkBMP.Height:=ddsd.dwHeight;
BitBlt(wrkBMP.Canvas.Handle, 0, 0, ddsd.dwWidth, ddsd.dwHeight, DC, 0, 0, srccopy);
ImgSurf.ReleaseDC(DC);
wrkBMP.SaveToFile("C:\1.bmp");


 
cyborg ©   (2004-07-30 12:10) [4]

Не знаю, не охото проверять, попробуй ImgSurf.ReleaseDC(DC); после сохранения поставить.


 
Sapersky   (2004-07-30 15:36) [5]

У ddsd нужно размер установить:

ZeroMemory(@ddsd, SizeOf(ddsd));
ddsd.dwSize:=SizeOf(ddsd);
hRet:=ImgSurf.GetSurfaceDesc(ddsd);

Ещё, может быть, цветовой формат у битмапа, PixelFormat:=pf24bit или что-нибудь такое.


 
NOX   (2004-07-30 19:08) [6]

Большое человеческое списибо, действительно забыл установить размер ddsd.dwSize.


 
cyborg ©   (2004-07-30 20:37) [7]


> [6] NOX   (30.07.04 19:08)

Что работает чтоли? :) А-то я чего-то в своих играх скриншотосниматель не делал, сделать чтоли (мысль вслух) :)



Страницы: 1 вся ветка

Текущий архив: 2004.10.24;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.03 c
14-1096545934
pasha_golub
2004-09-30 16:05
2004.10.24
TheBat3.0


1-1096498695
VlaDD
2004-09-30 02:58
2004.10.24
Как организовать нормальный "рандом"??


4-1095686418
Lord de Mon
2004-09-20 17:20
2004.10.24
Проверка на Stand By


1-1097240170
Chlavik
2004-10-08 16:56
2004.10.24
Как проверить В Delphi Olevarint на "Nothing" ?


4-1095749203
Users
2004-09-21 10:46
2004.10.24
Редакторы RC (аля Resource Workshop )