Got vtable18 into a better state

It's progress doesn't affect the status of CopyColorData, which is
back at 100%, as it makes sense the loop is a memcpy
This commit is contained in:
Joshua Peisach 2023-07-29 15:38:54 -04:00
parent 8206a7be6a
commit 9ef1f3543b
No known key found for this signature in database
GPG Key ID: 41C3D4189AFEDB5A
2 changed files with 13 additions and 20 deletions

View File

@ -34,28 +34,21 @@ int MxBitmap::vtable14(int)
} }
// OFFSET: LEGO1 0x100bcba0 // OFFSET: LEGO1 0x100bcba0
int MxBitmap::vtable18(BITMAPINFOHEADER *p_bmiHeader) MxResult MxBitmap::vtable18(BITMAPINFOHEADER *p_bmiHeader)
{ {
BITMAPINFO* bmi;
LPVOID *data;
MxResult result = FAILURE; MxResult result = FAILURE;
int height; int width = p_bmiHeader->biWidth;
int width; int height = p_bmiHeader->biHeight;
BITMAPINFO* bmi = new BITMAPINFO;
void *data;
bmi = new BITMAPINFO;
width = p_bmiHeader->biWidth;
height = p_bmiHeader->biHeight;
this->m_info = bmi; this->m_info = bmi;
if (bmi != NULL) { if (bmi != NULL) {
data = (LPVOID*) malloc((width + 3U & 0xfffffffc) * height); data = malloc((width + 3U & 0xfffffffc) * height);
this->m_data = (LPVOID*) data; this->m_data = (LPVOID*) data;
if(data != NULL) { if(data != NULL) {
bmi = this->m_info; bmi = this->m_info;
for (width = 0x10a; width != 0; width--) { memcpy(bmi, p_bmiHeader, 0x10a);
(bmi->bmiHeader).biSize = p_bmiHeader->biSize;
p_bmiHeader = (BITMAPINFOHEADER*)&p_bmiHeader->biWidth;
bmi = (BITMAPINFO*)&(bmi->bmiHeader).biWidth;
}
result = SUCCESS; result = SUCCESS;
this->m_bmiHeader = &this->m_info->bmiHeader; this->m_bmiHeader = &this->m_info->bmiHeader;
this->m_paletteData = this->m_info->bmiColors; this->m_paletteData = this->m_info->bmiColors;

View File

@ -14,7 +14,7 @@ class MxBitmap : public MxCore
__declspec(dllexport) virtual ~MxBitmap(); // vtable+00 __declspec(dllexport) virtual ~MxBitmap(); // vtable+00
virtual int vtable14(int); virtual int vtable14(int);
virtual int vtable18(BITMAPINFOHEADER *p_bmiHeader); virtual MxResult vtable18(BITMAPINFOHEADER *p_bmiHeader);
virtual int vtable1c(int p_width, int p_height, MxPalette *p_palette, int); virtual int vtable1c(int p_width, int p_height, MxPalette *p_palette, int);
virtual MxResult LoadFile(HANDLE p_handle); virtual MxResult LoadFile(HANDLE p_handle);
__declspec(dllexport) virtual MxLong Read(const char *p_filename); // vtable+24 __declspec(dllexport) virtual MxLong Read(const char *p_filename); // vtable+24
@ -27,12 +27,12 @@ class MxBitmap : public MxCore
virtual MxResult MxBitmap::CopyColorData(HDC p_hdc, int p_xSrc, int p_ySrc, int p_xDest, int p_yDest, int p_destWidth, int p_destHeight); // vtable+40 virtual MxResult MxBitmap::CopyColorData(HDC p_hdc, int p_xSrc, int p_ySrc, int p_xDest, int p_yDest, int p_destWidth, int p_destHeight); // vtable+40
private: private:
BITMAPINFO *m_info; BITMAPINFO *m_info; // 0x8
BITMAPINFOHEADER *m_bmiHeader; BITMAPINFOHEADER *m_bmiHeader; // 0xc
RGBQUAD *m_paletteData; RGBQUAD *m_paletteData; // 0x10
LPVOID *m_data; LPVOID *m_data; // 0x14
MxBool m_bmiColorsProvided; // 0x18 MxBool m_bmiColorsProvided; // 0x18
MxPalette *m_palette; MxPalette *m_palette; // 0x1c
}; };
#endif // MXBITMAP_H #endif // MXBITMAP_H