 |

13.03.2022, 08:57
|
|
Познающий
Регистрация: 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), то всё ок. что я делаю не так?😢
|
|
|

13.03.2022, 11:55
|
|
Флудер
Регистрация: 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)
|
|
|

13.03.2022, 12:06
|
|
Флудер
Регистрация: 26.10.2013
Сообщений: 4,924
С нами:
6603505
Репутация:
183
|
|
Сообщение от p0dsASS
вызов импла, __imp_D3DXSaveSurfaceToFileA
И все-таки это похоже на разные версии DXSDK. Скачай прогу depends walker и посмотри какую версию либы d3dx9_??.dll использует твой плагин. ?? - тут версия, для сампа это 25. Можешь в ручную загрузить d3dx9_25.dll и вызвать эту функцию из нее - должно работать
|
|
|
|
 |
Предыдущая тема
Следующая тема
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|