summary14 mfc显示图像

本文详细解析了SetDIBitsToDevice函数的使用方法,包括其参数说明及返回值解读,适用于设备环境句柄下将DIB颜色数据绘制到设备上下文的应用场景。同时,深入探讨了BITMAPINFO结构,尤其是BITMAPINFOHEADER部分,讲解了如何初始化该结构以适应不同分辨率和颜色深度的位图处理。

1、int SetDIBitsToDevice(HDC hdc, //设备环境句柄。

                                   int xDest, //指定目标矩形左上角的X轴坐标,按逻辑单位表示坐标。

                                   int Ydest, //指字目标矩形左上角的Y轴坐标,按逻辑单位表示坐标

                                   DWORD dwWidth,//指定DIB的宽度,按逻辑单位表示宽度

                                   DWORD dwHeight, //指定DIB的高度,按逻辑单位表示高度

                                   intXSrc,//指定DIB位图左下角的X轴坐标,按逻辑单位表示坐标。

                                   int Ysrc,//指定DIB位图左下角的Y轴坐标,按逻辑单位表示坐标

                                   UINT uStartScan, //指定DIB中的起始扫描线

                                   UINT cScanLines, //指定参数lpvBits指向的数组中包含的DIB扫描线数目

                                   CONST VOID *lpvBits, //指向存储DIB颜色数据的字节类型数组指针

                                   CONST BITMAPINFO *lpbmi, //指向BITMAPINFO结构的指针,该结构包含有关DIB的信息

                                   UINT fuColorUse)//指向BITMAPINFO结构中的成员bmiColors是否包含明确的RGB值或对调色板进行索引的值。

参数fuColorUse必须是下列值之一,这些值的含义如下:

DIB_PAL_COLORS:表示颜色表由16位的索引值数组组成,利用这些值可对当前选中的逻辑调色板进行索引。

DIB_RGB_COLORS:表示颜色表包含原义的RGB值。

返回值:如果函数执行成功,那么返回值是设置的扫描线数目;如果函数失败,那么返回值为0。

https://baike.baidu.com/item/SetDIBitsToDevice/6377604?fr=aladdin

2、BITMAPINFO结构

位图信息头BITMAPINFOHEADER,也是一个结构体,其定义如下:
typedef struct tagBITMAPINFOHEADER{
  DWORD biSize;
  LONG biWidth;
  LONG biHeight;
  WORD biPlanes;
  WORD biBitCount
  DWORD biCompression;
  DWORD biSizeImage;
  LONG biXPelsPerMeter;
  LONG biYPelsPerMeter;
  DWORD biClrUsed;
  DWORD biClrImportant;

} BITMAPINFOHEADER;
 

        BITMAPINFO bmi;
	ZeroMemory(&bmi, sizeof(BITMAPINFO));
	bmi.bmiHeader.biSizeImage = (iWidth * 24 + 31) / 32 * 4 * iHeight;
	bmi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
	bmi.bmiHeader.biWidth = iWidth;
	bmi.bmiHeader.biHeight = iHeight;
	bmi.bmiHeader.biPlanes = 1;
	bmi.bmiHeader.biBitCount = 24;
	bmi.bmiHeader.biCompression = BI_RGB;

https://blog.youkuaiyun.com/wangwenjing90/article/details/8537355

https://blog.youkuaiyun.com/xiaoxiao133/article/details/53507893

【注】一般采用横向扫描。

 

<think>我们正在处理一个关于Android Preference框架的问题。用户希望直接在设置项的摘要(summary)中显示字符串资源(string resource),而不是硬编码的字符串。 在Android的Preference系统中,通常我们会为每个Preference设置标题(title)和摘要(summary)。如果我们想直接使用字符串资源(比如@string/my_string),通常的做法是在XML布局文件中通过属性设置,例如: android:summary="@string/summary_text" 但是,用户可能是在代码中动态创建Preference,或者希望在代码中设置摘要,并且不想通过硬编码字符串的方式,而是直接引用字符串资源。 在代码中,我们可以使用`Preference.setSummary(CharSequence)`方法,但是这个方法接受一个CharSequence,也就是字符串。如果我们有字符串资源的ID(比如R.string.my_string),我们可以通过Context的getString方法获取字符串,然后设置。 例如: preference.setSummary(getString(R.string.my_string)); 但是,用户可能希望直接传递资源ID,而不是先转换成字符串。然而,Preference的setSummary方法并没有提供直接接受资源ID的重载方法。因此,我们必须先获取字符串,然后设置。 然而,还有一种情况:用户可能希望在XML中直接引用字符串资源,这是完全支持的。例如,在preferences.xml文件中: <Preference android:key="preference_key" android:title="@string/title" android:summary="@string/summary" /> 这样,摘要就会显示字符串资源中的内容。 但是,如果用户想要在代码中设置摘要,并且不想每次都用getString,我们可以自己封装一个工具方法,但Android原生并没有提供直接设置资源ID的方法。 另外,有时候我们可能希望在摘要中显示动态内容,比如将字符串资源和一些变量值组合。这时,我们可以使用String.format方法,并传递字符串资源ID和参数。 例如: String summary = getString(R.string.summary_template, value); preference.setSummary(summary); 总结一下: 1. 在XML中:直接使用`android:summary="@string/your_string"`。 2. 在代码中:使用`preference.setSummary(getString(R.string.your_string))`。 如果用户想要在代码中直接设置字符串资源ID而不转换,这是不可能的,因为setSummary方法只接受CharSequence或int(用于字符串资源ID的重载不存在)。所以必须转换。 但是,请注意,有一个setSummary(int)方法?实际上,在AndroidX Preference库中,我们查看Preference类,确实有: public void setSummary(@StringRes int summaryResId) { setSummary(mContext.getString(summaryResId)); } 所以,在AndroidX Preference库中,是有这个重载方法的!它接受一个字符串资源ID。因此,如果我们使用的是AndroidX Preference库,我们可以直接: preference.setSummary(R.string.your_string); 但是,如果用户使用的是旧的Support库或者原生Preference(在API 11及以上),那么原生Preference在较新的版本中(比如API 14以上)也有setSummary(int)方法。我们可以查看文档:在API 14(IceCreamSandwich)中,Preference类添加了setSummary(int summaryResId)方法。 因此,如果我们的minSdkVersion>=14,或者我们使用AndroidX(它支持到低版本),我们可以直接使用setSummary(int)方法。 结论: 1. 如果使用AndroidX Preference库(推荐),则可以直接使用`setSummary(R.string.your_string)`。 2. 如果使用原生Preference且minSdkVersion>=14,也可以直接使用`setSummary(R.string.your_string)`。 3. 如果minSdkVersion<14且使用原生Preference,则必须使用`setSummary(getResources().getString(R.string.your_string))`,或者做版本判断。 但是,现在一般推荐使用AndroidX库,并且minSdkVersion通常都在14以上,所以直接使用资源ID设置摘要应该是可行的。 因此,用户的问题解决方案: 在代码中,我们可以直接调用: preference.setSummary(R.string.your_string_resource); 前提是使用的Preference库提供了这个方法(AndroidX和较新的原生SDK都提供)。 另外,在XML中,我们一直都可以直接使用`android:summary="@string/your_string_resource"`。 所以,用户可以根据自己的使用场景选择在XML中设置或者在代码中设置。 参考引用: 在引用[1]中,我们看到在XML中设置summary的例子: android:summary="@string/prefs_summ_category_one" 在引用[2]中,我们看到在XML中设置其他属性,同样使用资源引用。 因此,用户的问题应该可以解决。 下面,我们生成相关问题。</think>在 Android Preference 中直接显示字符串资源作为摘要,可以通过以下两种方式实现: ### 1. 在 XML 布局中直接引用(推荐) 在 `preferences.xml` 中使用 `android:summary` 属性直接引用字符串资源: ```xml <Preference android:key="your_key" android:title="@string/pref_title" android:summary="@string/pref_summary" /> <!-- 直接引用字符串资源 --> ``` 系统会自动加载 `@string/pref_summary` 对应的文本内容作为摘要[^1]。 ### 2. 在代码中动态设置 通过 `setSummary()` 方法传递字符串资源 ID: ```java Preference pref = findPreference("your_key"); if (pref != null) { pref.setSummary(R.string.pref_summary); // 直接传入资源 ID } ``` > ⚠️ **注意**:AndroidX Preference 库(`androidx.preference.Preference`)支持直接传递资源 ID,但旧版 Support 库需使用 `setSummary(getString(R.string.pref_summary))`。 ### 关键点说明 - **资源更新**:若字符串资源内容变更,摘要会自动更新(XML 方式需重启 Activity,代码方式可动态刷新) - **格式化支持**:可在资源中定义格式化字符串,动态填充值: ```xml <!-- strings.xml --> <string name="dynamic_summary">已使用: %d%%</string> ``` ```java pref.setSummary(getString(R.string.dynamic_summary, usagePercentage)); ``` - **性能优化**:XML 方式比代码设置更高效,减少运行时开销[^2] ### 版本兼容性 | 方式 | Support 库 | AndroidX 库 | 最低 API | |--------------|------------|-------------|----------| | XML 引用 | ✔️ 支持 | ✔️ 支持 | API 1 | | `setSummary(@StringRes)` | ✘ 不支持 | ✔️ 支持 | API 1 (AndroidX) | ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值