Главная страница
    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.037 c
14-1096291250
pasha_golub
2004-09-27 17:20
2004.10.24
Софт для мобилы


8-1091007521
xdev
2004-07-28 13:38
2004.10.24
Полупрозрачная форма


1-1097152691
sergg
2004-10-07 16:38
2004.10.24
Свойства КомбоБокс


3-1096295809
Rostislav Rotaru
2004-09-27 18:36
2004.10.24
Полный бэкап базы


9-1087839046
Spingoffer
2004-06-21 21:30
2004.10.24
Естественный(искуственный) интеллект и отбор





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский