- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我编写了一段代码,允许我检索 Excel 工作簿工作表中特定单元格的底纹颜色。通过使用 MATLAB 的 actxserver
启动 COM 服务器,我已成功检索到 RGB 整数值。 , 然后访问 Color Property该特定单元格对象的内部对象。然后我获得了该整数的等效 RGB 三元组,因此我可以稍后在 MATLAB 中使用它进行绘图。
为了测试我的代码是否正常工作,我设计了以下测试:我创建了一个名为 colorTest.xlsx
的 Excel 工作簿,其中包含 8 种不同的颜色:
然后我运行我的 MATLAB 代码,它提取 B 列每个单元格的颜色信息。我应该得到一个颜色按相同垂直顺序排列的图,以及一个包含 int 值和每种颜色的 RGB 三元组的表格。
然而意想不到的事情发生了!查看结果:
请注意,从颜色属性获得的整数值并不总是与原始单元格的颜色匹配,对于黑色、白色、绿色和品红色,整数值是正确的,但对于所有其他颜色并非如此.例如,您可以看到,对于 Excel 上的红色,输出的 int 和 RGB 三元组对应于蓝色。
下表是我应该得到的正确结果,供引用:
Color Int R G B
-------- -------- -----
Black 0 0 0 0
White 16777215 1 1 1
Red 16711680 1 0 0
Green 65280 0 1 0
Blue 255 0 0 1
Cyan 65535 0 1 1
Magenta 16711935 1 0 1
Yellow 16776960 1 1 0
我使用 this RGB Int Calculator 获得了每种颜色的正确整数值.
如果我们比较这两个表,我们可以推断出红色和蓝色 channel 是倒置的。
代码:
我执行以运行测试的函数称为 getCellColor
。看一下代码:
function getCellColor()
clear all;
clc;
% Excel
filename = 'colorTest.xlsx';
% Start Excel as ActiveX server process on local host
Excel = actxserver('Excel.Application');
% Handle requested Excel workbook filename
path = validpath(filename);
% Cleanup tasks upon function completion
cleanUp = onCleanup(@()xlsCleanup(Excel, path));
% Open Excel workbook.
readOnly = true;
[~, workbookHandle] = openExcelWorkbook (Excel, path, readOnly);
% Initialise worksheets object
workSheets = workbookHandle.Worksheets;
% Get the sheet object (sheet #1)
sheet = get(workSheets,'item',1);
% Print table headers
fprintf('Color \t Int \t R G B\n');
fprintf('--------\t --------\t -----\n');
% Create figure
figure;
hold on;
% Loop through every color on the Excel file
for row = 1:8
% Get the cell object with name of color
cell = get(sheet, 'Cells', row, 1);
cName = cell.value;
% Get the cell object with colored background
cell = get(sheet, 'Cells', row, 2);
% Get the interior object
interior = cell.Interior;
% Get the color integer property
cInt = get(interior, 'Color'); % <-- Pay special attention here(*)
% Get the RGB triplet from its integer value
cRGB = int2rgb(cInt);
% Plot the color
patch([0 0 1 1], [8-row 9-row 9-row 8-row], cRGB);
% Print row with color data
fprintf('%-8s\t %8d\t %d %d %d\n', cName, cInt, cRGB);
end
% Turn off axes
set(findobj(gcf, 'type','axes'), 'Visible','off')
end
(*) 该指令负责恢复颜色整数。
注意:接下来描述的函数不会导致问题因为它们不参与颜色整数的获取(它们仅用于次要任务).我包含此信息只是为了完整性。
在此过程中,我使用了 MATLAB 的 iofun 文件夹中的三个 private 函数,它们是:validpath
、xlsCleanup
和 openExcelWorkbook
。我只是将它们复制到项目文件夹内名为 private 的文件夹中。
最后,为了从颜色整数中获取 RGB 三元组,我使用了一个改编自 this other function 的函数我在网上找到的。
这是我的 int2rgb
函数的代码:
function[RGB] = int2rgb(colorInt)
% Returns RGB triplet of an RGB integer.
if colorInt > 16777215 || colorInt < 0
error ('Invalid int value. Valid range: 0 <= value <= 16777215')
end
R = floor(colorInt / (256*256));
G = floor((colorInt - R*256*256)/256);
B = colorInt - R*256*256 - G*256;
RGB = [R, G, B]/255;
end
我想从中弄明白一些道理,但我真的不知道发生了什么。我做了一些研究,运气不佳,但是 this post和 this other post吸引了我的注意力。也许这与我的问题有关。
那么 Interior.Color 属性真的会反转颜色吗?
如果是这种情况,我应该将其视为正常行为还是这是一个错误?
下载链接:
我已将整个项目打包成一个 .zip 文件并上传,因此您可以立即在您的机器上运行此测试。下载文件并解压。
最佳答案
这里没有“对”或“错”之分,Matlab 和 Excel 只是编码颜色不同。您需要在代码中考虑到这一点。
我能找到的最接近官方来源的是这篇 MSDN 文章,大约一半的地方看到了“蓝色”的编码示例
The following examples set the interior of a selection of cells to the color blue. Selection.Interior.Color = 16711680
Selection.Interior.Color = &HFF0000
Selection.Interior.Color = &O77600000
Selection.Interior.Color = RGB(0, 0, 255)
关于excel - Interior.Color 属性反转颜色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35241610/
我正在阅读 java swing,但在理解它时遇到问题。 Color 是一个类吗? Color[] col= {Color.RED,Color.BLUE}; 这在java中是什么意思? 最佳答案 Is
我正在研究用 python 编写的 pacman 程序。其中一个模块是处理吃 bean 游戏的图形表示。这当然是一些主机颜色。列表如下: GHOST_COLORS = [] ## establishe
本网站:http://pamplonaenglishteacher.com 源代码在这里:https://github.com/Yorkshireman/pamplona_english_teache
我最近将我的手机更新为 Android Marshmallow 并在其上运行了我现有的应用程序,但注意到颜色行为有所不同:将更改应用到 View (可绘制)的背景时,共享相同背景的所有 View (引
所有 X11/w3c 颜色代码在 Android XML 资源文件格式中是什么样的? I know this looks a tad ridiculous as a question, but giv
试图让 ffmpeg 创建音频波形,同时能够控制图像大小、颜色和幅度。我已经尝试过这个(以及许多变体),但它只是返回无与伦比的 "。 ffmpeg -i input -filter_complex "
我很好奇你是否有一些关于 R 中颜色酿造的技巧,对于许多独特的颜色,以某种方式使图表仍然好看。 我需要大量独特的颜色(至少 24 种,可能需要更多,~50 种)用于堆叠区域图(所以不是热图,渐变色不起
我看到的许多 WPF 示例和示例似乎都有硬编码的颜色。这些指南 - http://msdn.microsoft.com/en-us/library/aa350483.aspx建议不要硬编码颜色。在构建
我想更改文件夹的默认蓝色 如何设置? 最佳答案 :hi Directory guifg=#FF0000 ctermfg=red 关于Vim NERDTree 颜色,我们在Stack Overflow上
是否有关于如何将任意字符串哈希为 RGB 颜色值的最佳实践?或者更一般地说:3 个字节。 你问:我什么时候需要这个?这对我来说并不重要,但想象一下任何 GitHub 上的那些管图 network pa
我正在尝试将默认颜色设置为自定义窗口小部件。 这是有问题的代码。 class ReusableCard extends StatelessWidget { ReusableCard({this.
import javax.swing.*; import javax.swing.table.DefaultTableCellRenderer; import javax.swing.table.Ta
我有一个 less 文件来定义一堆颜色/颜色。每个类名都包含相关颜色的名称,例如 .colourOrange{..} 或 .colourBorderOrange{..} 或 navLeftButtOr
我有一个RelativeLayout,我需要一个黑色背景和一个位于其中间的小图像。我使用了这段代码: 其中@drawable/bottom_box_back是: 这样我就可以将图像居中了。但背
我需要设置 浅色 的 JPanel 背景,只是为了不覆盖文本(粗体黑色)。 此刻我有这个: import java.util.Random; .... private Random random =
我正在尝试制作一个自定义文本编辑器,可以更改特定键入单词的字体和颜色。如何更改使用光标突出显示的文本的字体和/或颜色? 我还没有尝试过突出显示部分。我尝试获取整个 hEdit(HWND) 区域并更改字
我想改变我整个应用程序的颜色。 在我的 AndroidManfiest.xml 中,我有正确的代码: 在 values 文件夹中,我有 app_theme.xml: @style/MyAc
是否可以使用 android 数据绑定(bind)从 xml 中引用颜色? 这很好用: android:textColor="@{inputValue == null ? 0xFFFBC02D : 0
有没有办法在 Android 应用程序中设置“空心”颜色? 我的意思是我想要一个带有某种背景的框,而文本实际上会导致背景透明。换句话说,如果整个 View 在蓝色背景上,文本将是蓝色的,如果它是红色的
我用CGContextStrokePath画在白色背景图片中的一条直线上,描边颜色为红色,alpha为1.0画线后,为什么点不是(255, 0, 0),而是(255, 96, 96)为什么不是纯红色?
我是一名优秀的程序员,十分优秀!