Image Raw Data 如何用QT呈現
我有一組Image Raw Data 用 unsigned char array 存放因為是直接用code 產生的 Data 所以沒有也不需要圖像的副檔名
我查了些google的資料有人用
QWidget Main_Window;
QLabel i_label("Start", &Main_Window);
unsigned char buffer[597*800*1]; [color=#339966]//我的image data 是 one channel
for(int i=0;i<800;++i){
for(int j =0;j<597;++j){
buffer[i*597+j]=0;
}
}
QImage img(buffer,597, 800, QImage::Format_RGB32);//Format_ 不知道要用哪種才正確
//img.loadFromData((const uchar*)buffer, sizeof(buffer)/sizeof(char));
QPixmap px = QPixmap::fromImage(img);
QLabel i_label;
i_label.setPixmap(px);
Main_Window.show();
一直出不來我要的結果,或是其他人有別的作法嗎?
目前程式都會crash
想請教
謝謝 --------------------编程问答-------------------- 代码产生的图像是多少字节一个颜色?如果是四字节一颜色,那么可以使用QImage::Format_RGB32。 --------------------编程问答--------------------
因為是one channel 的 ,所以1個byte就代表一個pixels --------------------编程问答-------------------- 我現在是改寫成這樣
QWidget Main_Window;
QLabel i_label("Start", &Main_Window);
QByteArray data(597*800,( char)(255));
QVector<QRgb> grayscale;
for (int i = 0; i < 256; ++i) {
grayscale.append(qRgb(i, i, i));
}
QImage image((unsigned char*)data.data(), 597, 800, QImage::Format_Indexed8);
image.setColorTable(grayscale);
QPixmap px = QPixmap::fromImage(image);
i_label.setPixmap(px);
Main_Window.show();
結果有點差強人意
不明白為什麼下面會有一行黑色
--------------------编程问答-------------------- Format_Indexed8?
试试QImage::Format_Mono和QImage::Format_MonoLSB。 --------------------编程问答-------------------- 抱歉,上面那个是针对1bit的,看来要进行一些转换。这里是伪代码:
create a buffer quadruple of raw image data--------------------编程问答-------------------- QImage img(buffer,597, 800, QImage::Format_RGB32);//Format_ 不知道要用哪種才正確
for each pixel in raw image data
write each pixel from image data to buffer
load buffer using QImage's constructor.
这个buffer需要包含image header信息,并不仅仅是image的像素数据。
可以这么做
1. QImage img(init with size and format)
2. 对每个像素调用img.setPixel,数据为buffer里对应的像素数据
但是img.setPixel的速度很慢,暂时还没有看到怎么直接修改img的像素数据
或者试试uchar *pixels = const_cast<uchar*>(img.data())这样直接修改pixels里的值,我想应该可以,但是还没试过。
补充:移动开发 , Qt