有人能告诉我如何格式化我的数组,以便将其加载到QImage中吗? 现在我有一个2d-char数组:
uchar dataArray[400][400];
time_t t;
srand(time(&t));
int x, y;
for(x=0; x< 400; x++)
{
for(y=0; y<400; y++)
{
dataArray[x][y] = rand()%1001;
}
}
QPainter MyPainter(this);
scene = new QGraphicsScene(this);
scene->addEllipse(200, 200, 20, 20);
ui.graphicsView->setScene(scene);
*image = new QImage(*dataArray, 400, 400, QImage::Format_Mono);
image->setColorCount(2);
image->setColor(1, qRgb(255, 0, 0));//red
image->setColor(0, Qt::transparent);
scene->addPixmap(QPixmap::fromImage(*image));
当数组的内容为0时,我想要一种颜色和内容&gt; 0另一种颜色。所以我想将数组加载到单色QImage中。显然这个数组不起作用。如何为我的QImage正确加载格式化数组? 该文件只是说跟随,但我真的没有得到这意味着......
数据必须是32位对齐的,并且图像中每个数据扫描线也必须是32位对齐的。
我想要一个像Format_Mono这样的QImage,其中&#34; x&#34;和&#34; +&#34;表示具有不同颜色(红色和透明)的单个像素:
xxxx+xxx++xxx
xxx++xx++xxxx
++x+x+xxxxxxx
+xxx+x+x+x+xx
为此,我有一个数组(上面的代码中的dataArray)具有相同的模式,其中x高于指定值,+低于或等于(此时值为0)。 如何将此数组转换为QImage可以与Format_Mono一起使用的数组,以便我可以看到正确的模式?
答案 0 :(得分:0)
假设dataArray
被声明为uchar dataArray[400][400];
QImage tmpImg(dataArray[0], 400, 400, QImage::Format_Grayscale8);
// this image shares memory with dataArray and this is not safe
// for inexperienced developer
QImage result(tmpImg); // shallow copy
result.bits(); // enforce a deep copy of image
答案 1 :(得分:0)
找到将我的dataArray转换为工作imageArray的解决方案:
一旦你弄清楚它是如何完成的,它就很容易了(显然我应该知道为什么我不能把它放在第一位......)。我只需要逐位转换每个数据点到新数组,我也必须弄清楚,imageArray的轴必须是[y] [x] - 顺序而不是相反的方式(谁是他会按照这个顺序做到这一点吗?!)。
很多时候浪费了这一点......
uchar dataArray[400][400]; //first index is x-axis, second one is y-axis
uchar imageArray[400][52]; //first index is y-axis, second one is x-axis
time_t t;
srand(time(&t));
int x, y;
for(y=0; y<400; y++)
{
for(x=0; x<400; x++)
{
dataArray[x][y] = rand()%1001;
}
}
for(y=0; y<400; y++)
{
for(x=0; x<400; x++)
{
if(dataArray[x][y] > 0)
imageArray[y][x/8] |= 1 << 7-x%8; //changing bit to 1
//7- because msb is left but we start counting left starting with 0
else
imageArray[y][x/8] &= ~(1 << 7-x%8); //changing bit to 0
}
}
scene = new QGraphicsScene(this);
ui.graphicsView->setScene(scene);
QImage *image = new QImage(*imageArray, 400, 400, QImage::Format_Mono);