Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Media";
Текущий архив: 2004.10.24;
Скачать: [xml.tar.bz2];

Вниз

Подскажите как из 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 вся ветка

Форум: "Media";
Текущий архив: 2004.10.24;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.036 c
8-1091184838
a-n-d-r-e-y
2004-07-30 14:53
2004.10.24
Как вывести картинку на экран другого компьютера


1-1097235049
Cosinus
2004-10-08 15:30
2004.10.24
StringGrid и пунктир if gdFocused (DrawFocusRect)?


1-1097076864
Okcid
2004-10-06 19:34
2004.10.24
Реестр Windows


10-1051092870
sniknik
2003-04-23 14:14
2004.10.24
Какого клиента коннект? Midas.


14-1096614449
Babay
2004-10-01 11:07
2004.10.24
Книги по Delph 8. Поделитесь впечатлениями.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский