怎么利用资源ID加载图片
时间: 2024-03-12 21:47:42 浏览: 22
在Android中,我们可以通过资源ID来加载图片。具体的步骤如下:
1. 首先在res/drawable目录下添加图片资源。假设我们添加了一张名为image.png的图片。
2. 在代码中获取到该图片的资源ID,可以使用如下代码:
```
int resId = getResources().getIdentifier("image", "drawable", getPackageName());
```
其中,第一个参数是图片资源的名称,第二个参数是资源类型,这里是drawable,第三个参数是应用程序的包名。
3. 使用资源ID加载图片,可以使用如下代码:
```
ImageView imageView = findViewById(R.id.imageView);
imageView.setImageResource(resId);
```
其中,R.id.imageView是一个ImageView控件的ID,可以根据实际情况替换为其他控件的ID。
这样就可以利用资源ID加载图片了。需要注意的是,资源ID是在编译时生成的,因此需要确保资源名称的正确性,否则会导致加载失败。
相关问题
c++ gdi+ pBitmap->From 根据资源id加载图片
在 C++ 中使用 GDI+ 加载图片,可以使用 pBitmap 类的 From 方法。下面是一个简单的示例代码,通过资源 ID 加载图片:
```cpp
#include <Windows.h>
#include <gdiplus.h>
#pragma comment(lib, "gdiplus.lib")
using namespace Gdiplus;
int main()
{
GdiplusStartupInput gdiplusStartupInput;
ULONG_PTR gdiplusToken;
GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);
HINSTANCE hInstance = GetModuleHandle(NULL);
HRSRC hResource = FindResource(hInstance, MAKEINTRESOURCE(IDB_BITMAP1), RT_BITMAP);
DWORD imageSize = SizeofResource(hInstance, hResource);
HGLOBAL hGlobaImage = LoadResource(hInstance, hResource);
LPVOID pImage = LockResource(hGlobaImage);
Bitmap* pBitmap = Bitmap::FromMemory((BYTE*)pImage, imageSize);
// do something with the loaded bitmap
delete pBitmap;
UnlockResource(hGlobaImage);
FreeResource(hGlobaImage);
GdiplusShutdown(gdiplusToken);
return 0;
}
```
其中,IDB_BITMAP1 是资源 ID,RT_BITMAP 是资源类型。在加载完图片后,可以通过 Bitmap 类来操作图片。在使用完后,需要释放 Bitmap 对象的内存。
c++ gdi+ 根据 资源id 使bitmap加载 png图片 对象
可以使用以下代码实现:
```cpp
#include <Windows.h>
#include <gdiplus.h>
#pragma comment(lib, "gdiplus.lib")
// 加载 PNG 图片资源
Gdiplus::Bitmap* LoadPngFromResource(int resourceId)
{
HINSTANCE hInstance = GetModuleHandle(NULL);
HRSRC hRes = FindResource(hInstance, MAKEINTRESOURCE(resourceId), L"PNG");
DWORD imageSize = SizeofResource(hInstance, hRes);
HGLOBAL hGlobal = LoadResource(hInstance, hRes);
LPVOID imageResourceData = LockResource(hGlobal);
IStream* pStream = NULL;
HRESULT hr = CreateStreamOnHGlobal(NULL, TRUE, &pStream);
hr = pStream->Write(imageResourceData, imageSize, NULL);
pStream->Seek({0}, STREAM_SEEK_SET);
Gdiplus::Bitmap* pBitmap = Gdiplus::Bitmap::FromStream(pStream);
pStream->Release();
FreeResource(hGlobal);
return pBitmap;
}
// 使用示例
int main()
{
Gdiplus::GdiplusStartupInput gdiplusStartupInput;
ULONG_PTR gdiplusToken;
Gdiplus::GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);
Gdiplus::Bitmap* pBitmap = LoadPngFromResource(IDB_PNG1);
if (pBitmap != NULL)
{
// TODO: 使用 pBitmap 进行绘制等操作
delete pBitmap;
}
Gdiplus::GdiplusShutdown(gdiplusToken);
return 0;
}
```
其中 `IDB_PNG1` 是 PNG 图片资源的资源 ID,需要根据自己的实际情况修改。此外,代码中还需要包含 `resource.h` 头文件,以便使用资源 ID 宏定义。