def get_disas_bg_color(): """ Get the background color of the disas text area via pixel... YOLO PS: please expose the get_graph_color(...) palette accessor, Ilfak ;_; """ # find a form (eg, IDA view) to steal a pixel from for i in xrange(5): form = idaapi.find_tform("IDA View-%c" % chr(ord('A') + i)) if form: break else: raise RuntimeError("Failed to find donor IDA View") # lookup the Qt Widget for the given form and take 2px tall image if using_pyqt5(): widget = idaapi.PluginForm.FormToPyQtWidget(form) pixmap = widget.grab(QtCore.QRect(0, 0, widget.width(), 2)) else: widget = idaapi.PluginForm.FormToPySideWidget(form) pixmap = QtGui.QPixmap.grabWidget( widget, QtCore.QRect(0, 0, widget.width(), 2)) # extract a pixel from the top center like a pleb (hopefully a background pixel :|) img = QtGui.QImage(pixmap.toImage()) color = QtGui.QColor(img.pixel(img.width() / 2, 1)) # return the color of the pixel we extracted return color
def get_disas_bg_color(): """ Get the background color of an IDA disassembly view. ----------------------------------------------------------------------- The necessity of this function is pretty silly. I would like lighthouse to be color-aware of the user's IDA theme such that it selects reasonable colors that maintain readability. Since there is no supported way to probe the palette & colors in use by IDA, we must get creative. This function attempts to locate an IDA disassembly view, and take a screenshot of said widget. It will then attempt to extract the color of a single background pixel (hopefully). PS: please expose the get_graph_color(...) palette accessor, Ilfak ;_; """ # find a form (eg, IDA view) to steal a pixel from for i in xrange(5): form = idaapi.find_tform("IDA View-%c" % chr(ord('A') + i)) if form: break else: raise RuntimeError("Failed to find donor IDA View") # locate the Qt Widget for an IDA View form and take 2px tall screenshot if using_pyqt5(): widget = idaapi.PluginForm.FormToPyQtWidget(form) pixmap = widget.grab(QtCore.QRect(0, 0, widget.width(), 2)) else: widget = idaapi.PluginForm.FormToPySideWidget(form) region = QtCore.QRect(0, 0, widget.width(), 2) pixmap = QtGui.QPixmap.grabWidget(widget, region) # extract 1 pixel like a pleb (hopefully a background pixel :|) img = QtGui.QImage(pixmap.toImage()) color = QtGui.QColor(img.pixel(img.width() / 2, 1)) # return the color of the pixel we extracted return color