HOME FORUMS MEMBERS RECENT POSTS LOG IN  
× Авторизация
Имя пользователя:
Пароль:
Нет аккаунта? Регистрация
Баннер 1   Баннер 2
НОВЫЕ ТОРГОВАЯ НОВОСТИ ЧАТ
loading...
Скрыть
Вернуться   ANTICHAT > ПРОГРАММИРОВАНИЕ > Общие вопросы программирования
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

  #1  
Старый 13.03.2022, 08:57
gaZmanoV
Познающий
Регистрация: 18.09.2019
Сообщений: 31
С нами: 3502227

Репутация: 63
По умолчанию

trash.cpp:





Код:
void
TakeScreenshot
(
)
{
auto
pDevice
=
reinterpret_cast

(
RwD3D9GetCurrentD3DDevice
(
)
)
;
std
::
string sFileName
;
int
iCount
=
GetScreenshotFileName
(
sFileName
)
;
g_Log
.
Write
(
"sFileName: %s"
,
sFileName
.
c_str
(
)
)
;
//LPDIRECT3DTEXTURE9 pFrontBuff;
LPDIRECT3DSURFACE9 pTemp
;
//D3DXCreateTexture(pDevice, GetSystemMetrics(SM_CXSCREEN), GetSystemMetrics(SM_CYSCREEN), 1, NULL, D3DFMT_A8R8G8B8,
//D3DPOOL_SCRATCH, &pFrontBuff);
//pFrontBuff->GetSurfaceLevel(0, &pTemp);
pDevice
->
CreateOffscreenPlainSurface
(
GetSystemMetrics
(
SM_CXSCREEN
)
,
GetSystemMetrics
(
SM_CYSCREEN
)
,
D3DFMT_A8R8G8B8
,
D3DPOOL_SCRATCH
,
&
pTemp
,
NULL
)
;
if
(
SUCCEEDED
(
pDevice
->
GetFrontBufferData
(
0
,
pTemp
)
)
)
{
POINT point
{
}
;
ClientToScreen
(
*
*
(
HWND
*
*
)
0xC17054
,
&
point
)
;
RECT rect
;
GetClientRect
(
*
*
(
HWND
*
*
)
0xC17054
,
&
rect
)
;
rect
.
left
+=
point
.
x
;
rect
.
right
+=
point
.
x
;
rect
.
top
+=
point
.
y
;
rect
.
bottom
+=
point
.
y
;
//D3DXSaveTextureToFileA(sFileName.c_str(), D3DXIFF_PNG, pFrontBuff, nullptr);
D3DXSaveSurfaceToFileA
(
sFileName
.
c_str
(
)
,
D3DXIFF_PNG
,
pTemp
,
NULL
,
&
rect
)
;
// 
addChatMessage
(
0x99'00'00
,
"Скриншот сделан - sa-mp-%03i.png"
,
iCount
)
;
}
else
{
g_pSAMP
->
addChatMessage
(
0x99'00'00
,
"Не удалось сохранить скриншот."
)
;
}
pTemp
->
Release
(
)
;
*
LPBOOL
(
g_sampBase
.
getAddress
(
0x12DD3C
)
)
=
FALSE
;
// g_bTakeScreenshot
}


Если в качестве D3DXIMAGE_FILEFORMAT использовать D3DXIFF_PNG, то ничего толкового не сохраняется.



Но, если заменить на D3DXIFF_JPG, то изображение получается нормальным.



Мне jpg не нужен, нужен именно png. Как быть? Попробовал даже обновить DXSDK, но ничего не поменялось. Если использовать функу из SAMP(вызов импла, __imp_D3DXSaveSurfaceToFileA), то всё ок. что я делаю не так?😢
 
Ответить с цитированием

  #2  
Старый 13.03.2022, 11:55
kin4stat
Флудер
Регистрация: 06.11.2017
Сообщений: 2,759
С нами: 4483143

Репутация: 183


По умолчанию

Цитата:
Сообщение от p0dsASS  

trash.cpp:





Код:
void
TakeScreenshot
(
)
{
auto
pDevice
=
reinterpret_cast

(
RwD3D9GetCurrentD3DDevice
(
)
)
;
std
::
string sFileName
;
int
iCount
=
GetScreenshotFileName
(
sFileName
)
;
g_Log
.
Write
(
"sFileName: %s"
,
sFileName
.
c_str
(
)
)
;
//LPDIRECT3DTEXTURE9 pFrontBuff;
LPDIRECT3DSURFACE9 pTemp
;
//D3DXCreateTexture(pDevice, GetSystemMetrics(SM_CXSCREEN), GetSystemMetrics(SM_CYSCREEN), 1, NULL, D3DFMT_A8R8G8B8,
//D3DPOOL_SCRATCH, &pFrontBuff);
//pFrontBuff->GetSurfaceLevel(0, &pTemp);
pDevice
->
CreateOffscreenPlainSurface
(
GetSystemMetrics
(
SM_CXSCREEN
)
,
GetSystemMetrics
(
SM_CYSCREEN
)
,
D3DFMT_A8R8G8B8
,
D3DPOOL_SCRATCH
,
&
pTemp
,
NULL
)
;
if
(
SUCCEEDED
(
pDevice
->
GetFrontBufferData
(
0
,
pTemp
)
)
)
{
POINT point
{
}
;
ClientToScreen
(
*
*
(
HWND
*
*
)
0xC17054
,
&
point
)
;
RECT rect
;
GetClientRect
(
*
*
(
HWND
*
*
)
0xC17054
,
&
rect
)
;
rect
.
left
+=
point
.
x
;
rect
.
right
+=
point
.
x
;
rect
.
top
+=
point
.
y
;
rect
.
bottom
+=
point
.
y
;
//D3DXSaveTextureToFileA(sFileName.c_str(), D3DXIFF_PNG, pFrontBuff, nullptr);
D3DXSaveSurfaceToFileA
(
sFileName
.
c_str
(
)
,
D3DXIFF_PNG
,
pTemp
,
NULL
,
&
rect
)
;
// 
addChatMessage
(
0x99'00'00
,
"Скриншот сделан - sa-mp-%03i.png"
,
iCount
)
;
}
else
{
g_pSAMP
->
addChatMessage
(
0x99'00'00
,
"Не удалось сохранить скриншот."
)
;
}
pTemp
->
Release
(
)
;
*
LPBOOL
(
g_sampBase
.
getAddress
(
0x12DD3C
)
)
=
FALSE
;
// g_bTakeScreenshot
}


Если в качестве D3DXIMAGE_FILEFORMAT использовать D3DXIFF_PNG, то ничего толкового не сохраняется.

Но, если заменить на D3DXIFF_JPG, то изображение получается нормальным.

Мне jpg не нужен, нужен именно png. Как быть? Попробовал даже обновить DXSDK, но ничего не поменялось. Если использовать функу из SAMP(вызов импла, __imp_D3DXSaveSurfaceToFileA), то всё ок. что я делаю не так?😢
Попробуй не RwD3D9GetCurrentD3DDevice, а RefDevice у сампа(26E888 на R3)
 
Ответить с цитированием

  #3  
Старый 13.03.2022, 12:06
SR_team
Флудер
Регистрация: 26.10.2013
Сообщений: 4,924
С нами: 6603505

Репутация: 183


По умолчанию

Цитата:
Сообщение от p0dsASS  

вызов импла, __imp_D3DXSaveSurfaceToFileA
И все-таки это похоже на разные версии DXSDK. Скачай прогу depends walker и посмотри какую версию либы d3dx9_??.dll использует твой плагин. ?? - тут версия, для сампа это 25. Можешь в ручную загрузить d3dx9_25.dll и вызвать эту функцию из нее - должно работать
 
Ответить с цитированием
Ответ



Предыдущая тема Следующая тема

Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT ™ © 2001- Antichat Kft.