如何将三维数组转换为qpixmap

如何将三维数组转换为qpixmap,第1张

从imgpixel返回的数量实际上是一个QRgb值是格式独立的价值。然后,您可以将其转换成适当的声明,例如:import sys

from PyQt4QtGui import QPixmap, QApplication, QColor

app = QApplication(sysargv)

# img is QImage type

img = QPixmapgrabWindow(

QApplicationdesktop()winId(),

x=00,

y=100,

height=20,

width=20,

)toImage()

for x in range(0,20):

for y in range(0,20):

c = imgpixel(x,y)

colors = QColor(c)getRgbF()

print "(%s,%s) = %s" % (x, y, colors)

yield(0,0) = (0, 0, 0, 10)

(0,1) = (0, 0, 0, 10)

(0,2) = (0, 0, 0, 10)

(0,3) = (0, 0, 0, 10)

QImage的文档: 一个像素的颜色可以通过传递其坐标被检索 像素()函数。像素()函数返回的颜色作为QRgb 图像的格式的值上独立。

对Rgb返回值由QImagepixel既可以直接提取,或者通过QColor对象:>>> from PyQt4 import QtGui

>>> rgb =

>>> QtGuiqRed(rgb), QtGuiqGreen(rgb), QtGuiqBlue(rgb)

(106, 102, 99)

>>> QtGuiQColor(rgb)getRgb()[:-1]

(106, 102, 99)

1波形图中想实现这个功能,只要改变X坐标轴的显示格式和波形图标的扫描方式|:右击波形图控件选择“属性”,进行设置;波形图表中,数据会刷新绘制显示,第一次显示的点第二次就被新的数据点覆盖不见了。这种情况下,可以利用while循环,配合移位寄存器与数组插入来实现,把新的数据点插入到旧的数据点之后再一起送往控件显示,只要你送的数据点为波形数据(含时间信息),则x轴会自动压缩的。

2首先,如果你采集到的数据只有波形幅值信息而没有时间信息的话,那么你先要将其转换为波形数据。假设你的数据已经有时间信息的情况下,你可以利用提取“波形属性”这个vi来处理,它可以将波形和时间分离,幅值为一维数组,不过分离出的时间可能为t0和dt两个标量,这个时候,你需要根据波形数据的大小自己将它扩展为数组。比如:波形中有10个数据,t0为0,dt为01,那么你可以利用循环,将时间信息循环计算10次,得到一个时间数组[0,01,02,……09],然后将波形的幅值数据数组和时间数组重新捆绑后,利用“写入电子表格”vi即可。

这个问题其实可以不这么复杂,如果你保存的是波形文件(用“写入波形文件”vi)的话,直接用“导出波形至文本文件”vi即可。这个vi将波形数据按时间和幅值数据的顺序保存到了txt文件中,第一列为时间,然后为数据。要知道,txt文件和excel文件对于Labview来说是一样一样的。

同步显示问题只要把你的显示控件在程序框图中放入循环体中就可以了。这样每循环一次就会显示一次曲线,如果你的循环周期比较短,显示在肉眼看几乎就是同步的了(因为毕竟每次显示的都是一组数据)。更严谨的同步显示估计是单点采集方式吧。但是那是采集设置的问题,就显示的同步来说,只需放入循环内就可以了。

3导出时间为1904这是因为你的波形数据在处理时为使用当前时间作为起始时间。用“获取当前时间”vi可以解决这个问题。不过我记得好像得到的当前时间需要转换下格式。然后用“创建波形”vi将你的波形数据重新生成一个就可以了。

4如果想通用些的,就保存成txt(excel)的数据格式,但这种格式在数据点较多时会很大,打开也很慢,并且这种格式保存速度慢,如果你的程序对数据采集速度保存速度有要求的话,要慎重。更多的是dat格式或者wave格式,还有tdm和tdms。这些格式保存速度快,数据以二进制格式保存,文件小。但是打开方式却不通用了,一般仅供labview自己打开,不过可以通过labview中的数据转换的vi来将其在事后(即全部采集完成后,这样不影响实时性)转换为txt格式文件,以供查看。

希望对你有帮助。

举个小例子:

#include "qqlevelh"

QQLevel::QQLevel(QWidget parent)

: QWidget(parent)

{

setFixedSize(300, 200);

level_button = new QPushButton();

grade_button = new QPushButton();

//分别获取0-9数字图标

QPixmap pixmap_0 = getPixmap(QString(":/level/level_value"), 10, 0);

QPixmap pixmap_1 = getPixmap(QString(":/level/level_value"), 10, 1);

QPixmap pixmap_2 = getPixmap(QString(":/level/level_value"), 10, 2);

QPixmap pixmap_3 = getPixmap(QString(":/level/level_value"), 10, 3);

QPixmap pixmap_4 = getPixmap(QString(":/level/level_value"), 10, 4);

QPixmap pixmap_5 = getPixmap(QString(":/level/level_value"), 10, 5);

QPixmap pixmap_6 = getPixmap(QString(":/level/level_value"), 10, 6);

QPixmap pixmap_7 = getPixmap(QString(":/level/level_value"), 10, 7);

QPixmap pixmap_8 = getPixmap(QString(":/level/level_value"), 10, 8);

QPixmap pixmap_9 = getPixmap(QString(":/level/level_value"), 10, 9);

int count = 3;

int pixmap_width = pixmap_8width();

int pixmap_height = pixmap_8height();

//最前面LV图标

QPixmap pixmap_lv(":/level/lv");

int lv_width = pixmap_lvwidth();

QPixmap total_pixmap(QSize(pixmap_widthcount + lv_width, pixmap_height));

QPainter painter(&total_pixmap);

//绘制LV图标

painterdrawPixmap(QRect(0, 0, lv_width, pixmap_height), pixmap_lv);

//再绘制LV888图标

for(int i=0; i

{

painterdrawPixmap(QRect(lv_width+pixmap_widthi, 0, pixmap_width, pixmap_height), pixmap_8);

}

level_button->setFixedHeight(30);

level_button->setIcon(total_pixmap);

level_button->setIconSize(total_pixmapsize());

//分别获取皇冠、太阳、月亮、星星、等图标

QPixmap pixmap_grade_0 = getPixmap(QString(":/level/grade"), 5, 0);

QPixmap pixmap_grade_1 = getPixmap(QString(":/level/grade"), 5, 1);

QPixmap pixmap_grade_2 = getPixmap(QString(":/level/grade"), 5, 2);

QPixmap pixmap_grade_3 = getPixmap(QString(":/level/grade"), 5, 3);

QPixmap pixmap_grade_4 = getPixmap(QString(":/level/grade"), 5, 4);

//绘制5个皇冠

int grade_count = 5;

int pixmap_grade_width = pixmap_grade_0width();

int pixmap_grade_height = pixmap_grade_0height();

QPixmap total_grade_pixmap(QSize(pixmap_grade_widthgrade_count, pixmap_grade_height));

QPainter grade_painter(&total_grade_pixmap);

for(int i=0; i

{

grade_painterdrawPixmap(QRect(pixmap_grade_widthi, 0, pixmap_grade_width, pixmap_grade_height), pixmap_grade_0);

}

grade_button->setFixedHeight(30);

grade_button->setIcon(total_grade_pixmap);

grade_button->setIconSize(total_grade_pixmapsize());

QVBoxLayout main_layout = new QVBoxLayout();

main_layout->addStretch();

main_layout->addWidget(level_button);

main_layout->addWidget(grade_button);

main_layout->addStretch();

main_layout->setSpacing(20);

main_layout->setContentsMargins(0, 0, 0, 0);

setLayout(main_layout);

}

QQLevel::~QQLevel()

{

}

QPixmap QQLevel::getPixmap(QString pixmap_name, int count, int index)

{

QPixmap final_pixmap;

if(!pixmap_nameisEmpty() && count > 0)

{

QPixmap pixmap(pixmap_name);

int pixmap_width = pixmapwidth()/count;

int pixmap_height = pixmapheight();

final_pixmap = pixmapcopy(pixmap_widthindex, 0, pixmap_width, pixmap_height);

}

return final_pixmap;

}

合并过程中有可能会出现背景变色,稍作处理即可!

QImage pixmap(QSize(this->width()WINDOW_PAGE_COUNT, WINDOW_HEIGHT), QImage::Format_ARGB32_Premultiplied);

QPainter painter(&pixmap);

paintersetRenderHint(QPainter::Antialiasing, true);

paintersetCompositionMode(QPainter::CompositionMode_Source);

painterfillRect(pixmaprect(), Qt::transparent);

paintersetCompositionMode(QPainter::CompositionMode_SourceOver);

for(int i = 0; i < WINDOW_PAGE_COUNT; i++)

{

   painterdrawImage(QRect(WINDOW_WIDTHi, 0, WINDOW_WIDTH, WINDOW_HEIGHT),

   QImage(QString(":/newCharacter/newFeature_%1")arg(i)));

}

total_label = new QLabel(this);

total_label->resize(pixmapsize());

total_label->setPixmap(QPixmap::fromImage(pixmap));

total_label->move(WINDOW_START_X, WINDOW_START_Y);

从imgpixel返回的数量实际上是一个QRgb值是格式独立的价值。然后,您可以将其转换成适当的声明,例如:import sys

from PyQt4QtGui import QPixmap, QApplication, QColor

app = QApplication(sysargv)

# img is QImage type

img = QPixmapgrabWindow(

QApplicationdesktop()winId(),

x=00,

y=100,

height=20,

width=20,

)toImage()

for x in range(0,20):

for y in range(0,20):

c = imgpixel(x,y)

colors = QColor(c)getRgbF()

print "(%s,%s) = %s" % (x, y, colors)

yield(0,0) = (0, 0, 0, 10)

(0,1) = (0, 0, 0, 10)

(0,2) = (0, 0, 0, 10)

(0,3) = (0, 0, 0, 10)

QImage的文档: 一个像素的颜色可以通过传递其坐标被检索 像素()函数。像素()函数返回的颜色作为QRgb 图像的格式的值上独立。

对Rgb返回值由QImagepixel既可以直接提取,或者通过QColor对象:>>> from PyQt4 import QtGui

>>> rgb =

>>> QtGuiqRed(rgb), QtGuiqGreen(rgb), QtGuiqBlue(rgb)

(106, 102, 99)

>>> QtGuiQColor(rgb)getRgb()[:-1]

(106, 102, 99)

从imgpixel返回的数量实际上是一个QRgb值是格式独立的价值。然后,您可以将其转换成适当的声明,例如:import sys

from PyQt4QtGui import QPixmap, QApplication, QColor

app = QApplication(sysargv)

# img is QImage type

img = QPixmapgrabWindow(

QApplicationdesktop()winId(),

x=00,

y=100,

height=20,

width=20,

)toImage()

for x in range(0,20):

for y in range(0,20):

c = imgpixel(x,y)

colors = QColor(c)getRgbF()

print "(%s,%s) = %s" % (x, y, colors)

yield(0,0) = (060784313725490191, 06588235294117647, 070980392156862748, 10)

(0,1) = (060784313725490191, 06588235294117647, 070980392156862748, 10)

(0,2) = (061176470588235299, 06588235294117647, 071372549019607845, 10)

(0,3) = (061176470588235299, 066274509803921566, 071372549019607845, 10)

QImage的文档: 一个像素的颜色可以通过传递其坐标被检索 像素()函数。像素()函数返回的颜色作为QRgb 图像的格式的值上独立。

对的QRgb返回值由QImagepixel既可以直接提取,或者通过QColor对象:>>> from PyQt4 import QtGui

>>> rgb = 4285163107

>>> QtGuiqRed(rgb), QtGuiqGreen(rgb), QtGuiqBlue(rgb)

(106, 102, 99)

>>> QtGuiQColor(rgb)getRgb()[:-1]

(106, 102, 99)

以上就是关于如何将三维数组转换为qpixmap全部的内容,包括:如何将三维数组转换为qpixmap、C# chart控件,X轴显示问题、qimage copy函数怎么使用等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9494023.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-28
下一篇2023-04-28

发表评论

登录后才能评论

评论列表(0条)

    保存