|
本帖最后由 斗战胜猴 于 2025-6-25 17:01 编辑
关于8位图调色板被替换的问题修复
默认 api GetDIBits会使用他自带的内存调色板,二非我们自定义的系统默认调色板,使用系统调色板 8位图色彩 将近1比1还原24位图的颜色 |
截图屏幕 | 字节集 | | |
参_起点X | 整数型 | | | | 参_起点Y | 整数型 | | | | 参_宽度 | 整数型 | | | | 参_高度 | 整数型 | | | | 参_位深度 | 整数型 | | | |
变量名 | 类 型 | 静态 | 数组 | 备 注 | 局_场景句柄 | 整数型 | | | 局_位图句柄 | 整数型 | | | 局_位深度 | 整数型 | | | 局_BitX | 整数型 | | | 局_BitY | 整数型 | | | 局_宽度 | 整数型 | | | 局_高度 | 整数型 | | | 局_屏幕位图新 | 字节集 | | | 局_屏幕位图信息指针新 | 整数型 | | | 局_屏幕位图颜色指针新 | 整数型 | | |
如果 (集_屏幕设备DC = 0 ) 初始化屏幕 () 如果真 (是否需要再次初始化屏幕 ()) 初始化屏幕 () 局_宽度 = 选择 (参_宽度 = 0, 集_屏幕宽度, 参_宽度)局_高度 = 选择 (参_高度 = 0, 集_屏幕高度, 参_高度 )局_位深度 = 选择 (参_位深度 ≥ 1 且 参_位深度 ≤ 32, 参_位深度, 24 )局_BitX = 参_起点X 局_BitY = 参_起点Y 局_屏幕位图新 = 位图_创建空白位图 (局_宽度, 局_高度, 局_位深度 )局_屏幕位图信息指针新 = 位图_取位图信息数据指针 (局_屏幕位图新 )局_屏幕位图颜色指针新 = 位图_取位图颜色数据指针 (局_屏幕位图新 )调用子程序_通用型 (GetProcAddress_汇编 (GetModuleHandleA_汇编 (“gdi32.dll”), “BitBlt”), , , 集_屏幕场景句柄, 0, 0, 局_宽度, 局_高度, 集_屏幕设备DC, 局_BitX, 局_BitY, 13369376 ) 如果 (局_位深度 ≥ 16 ) 调用子程序_通用型 (GetProcAddress_汇编 (GetModuleHandleA_汇编 (“gdi32.dll”), “GetDIBits”), , , 集_屏幕场景句柄, 集_屏幕位图句柄, 0, 局_高度, 局_屏幕位图颜色指针新, 局_屏幕位图信息指针新, 0 ) 调用子程序_通用型 (GetProcAddress_汇编 (GetModuleHandleA_汇编 (“gdi32.dll”), “CreateCompatibleDC”), , 局_场景句柄, 0 ) 调用子程序_通用型 (GetProcAddress_汇编 (GetModuleHandleA_汇编 (“gdi32.dll”), “CreateDIBSection”), , 局_位图句柄, 局_场景句柄, 局_屏幕位图信息指针新, 0, 局_屏幕位图颜色指针新, 0, 0 ) 调用子程序_通用型 (GetProcAddress_汇编 (GetModuleHandleA_汇编 (“gdi32.dll”), “SelectObject”), , , 局_场景句柄, 局_位图句柄 ) 调用子程序_通用型 (GetProcAddress_汇编 (GetModuleHandleA_汇编 (“gdi32.dll”), “BitBlt”), , , 局_场景句柄, 0, 0, 局_宽度, 局_高度, 集_屏幕场景句柄, 0, 0, 13369376 ) 调用子程序_通用型 (GetProcAddress_汇编 (GetModuleHandleA_汇编 (“gdi32.dll”), “GetDIBits”), , , 局_场景句柄, 局_位图句柄, 0, 局_高度, 局_屏幕位图颜色指针新, 局_屏幕位图信息指针新, 0 ) 调用子程序_通用型 (GetProcAddress_汇编 (GetModuleHandleA_汇编 (“gdi32.dll”), “DeleteDC”), , , 局_场景句柄 ) 调用子程序_通用型 (GetProcAddress_汇编 (GetModuleHandleA_汇编 (“gdi32.dll”), “DeleteObject”), , , 局_位图句柄 )返回 (局_屏幕位图新)|
截图窗口 | 字节集 | | |
参_窗口句柄 | 整数型 | | | | 参_起点X | 整数型 | | | | 参_起点Y | 整数型 | | | | 参_宽度 | 整数型 | | | | 参_高度 | 整数型 | | | | 参_位深度 | 整数型 | | | |
变量名 | 类 型 | 静态 | 数组 | 备 注 | 局_场景句柄 | 整数型 | | | 局_位图句柄 | 整数型 | | | 局_位深度 | 整数型 | | | 局_BitX | 整数型 | | | 局_BitY | 整数型 | | | 局_窗口宽度新 | 整数型 | | | 局_窗口高度新 | 整数型 | | | 局_窗口位图新 | 字节集 | | | 局_窗口位图信息指针新 | 整数型 | | | 局_窗口位图颜色指针新 | 整数型 | | |
参_窗口句柄 = 选择 (参_窗口句柄 = 0, 65552, 参_窗口句柄 ) 如果 (集_窗口设备DC = 0 或 参_窗口句柄 ≠ 集_窗口句柄 ) 初始化窗口 (参_窗口句柄 ) 如果真 (是否需要再次初始化窗口 (参_窗口句柄 )) 初始化窗口 (参_窗口句柄 ) 局_窗口宽度新 = 选择 (参_宽度 = 0, 集_窗口宽度, 参_宽度)局_窗口高度新 = 选择 (参_高度 = 0, 集_窗口高度, 参_高度 )局_位深度 = 选择 (参_位深度 ≥ 1 且 参_位深度 ≤ 32, 参_位深度, 24 )局_BitX = 参_起点X 局_BitY = 参_起点Y 局_窗口位图新 = 位图_创建空白位图 (局_窗口宽度新, 局_窗口高度新, 局_位深度 )局_窗口位图信息指针新 = 位图_取位图信息数据指针 (局_窗口位图新 )局_窗口位图颜色指针新 = 位图_取位图颜色数据指针 (局_窗口位图新 )调用子程序_通用型 (GetProcAddress_汇编 (GetModuleHandleA_汇编 (“gdi32.dll”), “BitBlt”), , , 集_窗口场景句柄, 0, 0, 局_窗口宽度新, 局_窗口高度新, 集_窗口设备DC, 局_BitX, 局_BitY, 13369376 ) 如果 (局_位深度 ≥ 16 ) 调用子程序_通用型 (GetProcAddress_汇编 (GetModuleHandleA_汇编 (“gdi32.dll”), “GetDIBits”), , , 集_窗口场景句柄, 集_窗口位图句柄, 0, 局_窗口高度新, 局_窗口位图颜色指针新, 局_窗口位图信息指针新, 0 ) 调用子程序_通用型 (GetProcAddress_汇编 (GetModuleHandleA_汇编 (“gdi32.dll”), “CreateCompatibleDC”), , 局_场景句柄, 0 ) 调用子程序_通用型 (GetProcAddress_汇编 (GetModuleHandleA_汇编 (“gdi32.dll”), “CreateDIBSection”), , 局_位图句柄, 局_场景句柄, 局_窗口位图信息指针新, 0, 局_窗口位图颜色指针新, 0, 0 ) 调用子程序_通用型 (GetProcAddress_汇编 (GetModuleHandleA_汇编 (“gdi32.dll”), “SelectObject”), , , 局_场景句柄, 局_位图句柄 ) 调用子程序_通用型 (GetProcAddress_汇编 (GetModuleHandleA_汇编 (“gdi32.dll”), “BitBlt”), , , 局_场景句柄, 0, 0, 局_窗口宽度新, 局_窗口高度新, 集_窗口场景句柄, 0, 0, 13369376 ) 调用子程序_通用型 (GetProcAddress_汇编 (GetModuleHandleA_汇编 (“gdi32.dll”), “GetDIBits”), , , 局_场景句柄, 局_位图句柄, 0, 局_窗口高度新, 局_窗口位图颜色指针新, 局_窗口位图信息指针新, 0 ) 调用子程序_通用型 (GetProcAddress_汇编 (GetModuleHandleA_汇编 (“gdi32.dll”), “DeleteDC”), , , 局_场景句柄 ) 调用子程序_通用型 (GetProcAddress_汇编 (GetModuleHandleA_汇编 (“gdi32.dll”), “DeleteObject”), , , 局_位图句柄 )返回 (局_窗口位图新)置入代码 ({ 139, 69, 8, 139, 0, 131, 248, 0, 116, 6, 131, 192, 8, 131, 192, 14, 201, 194, 4, 0 })返回 (0 )置入代码 ({ 139, 69, 8, 139, 0, 131, 248, 0, 116, 46, 131, 192, 8, 137, 195, 131, 192, 54, 139, 91, 28, 131, 251, 1, 116, 15, 131, 251, 4, 116, 15, 131, 251, 8, 116, 15, 131, 192, 0, 235, 15, 131, 192, 8, 235, 10, 131, 192, 64, 235, 5, 5, 0, 4, 0, 0, 201, 194, 4, 0 })返回 (0 ) |
|