gpt4 book ai didi

c++ - 资源图像不工作 C++

转载 作者:太空宇宙 更新时间:2023-11-04 13:59:32 25 4
gpt4 key购买 nike

已解决:问题出在::CreateCompatibleBitmap ( hdc, 26, 26 );我正在创建一个 26x26 位图,而实际位图是 166x166,因为窗口的背景颜色和位图是相同的,所以当::BitBlt 编辑时它是不可见的。多么愚蠢的错误。


这是一个奇怪的问题,当我::BitBlt 它们时,很少有资源 bmp 图像没有显示出来,如果我用不同的 bmp 文件替换有问题的图像(代码没有变化)那么它就可以工作。资源中有更多的 bmp 文件,它们正在工作。
BMP 可能有什么问题?
我已经与资源黑客核对过,可执行文件中有图像。

以下是我在代码中所做的。

资源.rc

IDB_ANIMMAIN_1                      BITMAP  DISCARDABLE "E:\\image\\AnimMain\\AnimMain_1.bmp"
IDB_ANIMMAIN_2 BITMAP DISCARDABLE "E:\\image\\AnimMain\\AnimMain_2.bmp"
IDB_ANIMMAIN_3 BITMAP DISCARDABLE "E:\\image\\AnimMain\\AnimMain_3.bmp"
IDB_ANIMMAIN_4 BITMAP DISCARDABLE "E:\\image\\AnimMain\\AnimMain_4.bmp"
IDB_ANIMMAIN_5 BITMAP DISCARDABLE "E:\\image\\AnimMain\\AnimMain_5.bmp"
IDB_ANIMMAIN_6 BITMAP DISCARDABLE "E:\\image\\AnimMain\\AnimMain_6.bmp"
IDB_ANIMMAIN_7 BITMAP DISCARDABLE "E:\\image\\AnimMain\\AnimMain_7.bmp"
IDB_ANIMMAIN_8 BITMAP DISCARDABLE "E:\\image\\AnimMain\\AnimMain_8.bmp"
IDB_ANIMMAIN_9 BITMAP DISCARDABLE "E:\\image\\AnimMain\\AnimMain_9.bmp"
IDB_ANIMMAIN_10 BITMAP DISCARDABLE "E:\\image\\AnimMain\\AnimMain_10.bmp"
IDB_ANIMMAIN_11 BITMAP DISCARDABLE "E:\\image\\AnimMain\\AnimMain_11.bmp"
IDB_ANIMMAIN_12 BITMAP DISCARDABLE "E:\\image\\AnimMain\\AnimMain_12.bmp"

资源.h

#define   IDB_ANIMMAIN_1                                    501
#define IDB_ANIMMAIN_2 502
#define IDB_ANIMMAIN_3 503
#define IDB_ANIMMAIN_4 504
#define IDB_ANIMMAIN_5 505
#define IDB_ANIMMAIN_6 506
#define IDB_ANIMMAIN_7 507
#define IDB_ANIMMAIN_8 508
#define IDB_ANIMMAIN_9 509
#define IDB_ANIMMAIN_10 510
#define IDB_ANIMMAIN_11 511
#define IDB_ANIMMAIN_12 512

主要.cpp

std::vector < HBITMAP > bitmaps;

bitmaps.push_back ( ::LoadBitmap ( hInstance, MAKEINTRESOURCE ( IDB_ANIMMAIN_1 ) ) );

bitmaps.push_back ( ::LoadBitmap ( hInstance, MAKEINTRESOURCE ( IDB_ANIMMAIN_2 ) ) );

bitmaps.push_back ( ::LoadBitmap ( hInstance, MAKEINTRESOURCE ( IDB_ANIMMAIN_3 ) ) );

bitmaps.push_back ( ::LoadBitmap ( hInstance, MAKEINTRESOURCE ( IDB_ANIMMAIN_4 ) ) );

bitmaps.push_back ( ::LoadBitmap ( hInstance, MAKEINTRESOURCE ( IDB_ANIMMAIN_5 ) ) );

bitmaps.push_back ( ::LoadBitmap ( hInstance, MAKEINTRESOURCE ( IDB_ANIMMAIN_6 ) ) );

bitmaps.push_back ( ::LoadBitmap ( hInstance, MAKEINTRESOURCE ( IDB_ANIMMAIN_7 ) ) );

bitmaps.push_back ( ::LoadBitmap ( hInstance, MAKEINTRESOURCE ( IDB_ANIMMAIN_8 ) ) );

bitmaps.push_back ( ::LoadBitmap ( hInstance, MAKEINTRESOURCE ( IDB_ANIMMAIN_9 ) ) );

bitmaps.push_back ( ::LoadBitmap ( hInstance, MAKEINTRESOURCE ( IDB_ANIMMAIN_10 ) ) );

bitmaps.push_back ( ::LoadBitmap ( hInstance, MAKEINTRESOURCE ( IDB_ANIMMAIN_11 ) ) );

bitmaps.push_back ( ::LoadBitmap ( hInstance, MAKEINTRESOURCE ( IDB_ANIMMAIN_12 ) ) );

更新:

HDC hdc = ::GetDC ( hwnd );

int i = 0;


while ( running )
{


hbitmap = bitmaps [ i ];

::Sleep ( 200 ); paint ( hdc );


i++;


if ( i >= bitmaps.size ( ) ) i = 0;



}


::ReleaseDC ( hwnd, hdc );



return true;

以下是我如何进行绘画,绘画函数是从执行动画(使用图像)的循环中调用的,this->hbitmap 在循环中更新。
如果我将::LoadBitmap 调用中的 IDB_ANIMMAIN_x 更改为另一个资源标识符,那么它就可以工作,所以我确定循环和 onpaint();正在工作。

绘画:

HDC dcSkin = ::CreateCompatibleDC ( hdc );

HDC hMemDc = ::CreateCompatibleDC ( hdc );


HBITMAP hmemBmp = ::CreateCompatibleBitmap ( hdc, 26, 26 );


HBITMAP hOldMemBmp = (HBITMAP) ::SelectObject ( hMemDc, hmemBmp );


HBITMAP hOldSkinBmp = (HBITMAP) ::SelectObject ( dcSkin, this->hbitmap );


//::MessageBox ( 0, "second", "jAnimationBig::paint", 0 );
::BitBlt ( hMemDc, 0, 0, width, height, dcSkin, 0, 0, SRCCOPY );

::BitBlt ( hdc, 0, 0, width, height, hMemDc, 0, 0, SRCCOPY );



::SelectObject ( hMemDc, hOldMemBmp );
::SelectObject ( dcSkin, hOldSkinBmp );


::DeleteObject ( hOldSkinBmp );
::DeleteObject ( hOldMemBmp );
::DeleteObject( hmemBmp );
::DeleteDC ( hMemDc );
::DeleteDC ( dcSkin );

最佳答案

已解决:问题出在 ::CreateCompatibleBitmap ( hdc, 26, 26 ); 我正在创建一个 26x26 位图,其中实际位图是166x166,因为窗口的背景颜色和位图是相同的,所以当::BitBlt ed 时它是不可见的。多么愚蠢的错误。

关于c++ - 资源图像不工作 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19832045/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com