当前位置:编程学习 > wap >>

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。 --------------------编程问答--------------------
引用 1 楼 jiangcaiyang123 的回复:
代码产生的图像是多少字节一个颜色?如果是四字节一颜色,那么可以使用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

for each pixel in raw image data
    write each pixel from image data to buffer

load buffer using QImage's constructor.
--------------------编程问答-------------------- QImage img(buffer,597, 800, QImage::Format_RGB32);//Format_ 不知道要用哪種才正確
这个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
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,