同系列文章:
用户通过浏览器将图像数据上传到服务器,然后由服务器下发到嵌入式设备。设备只能显示16位Bitmap图像。
下面为在设备端基于Qt实现的下发图像复原:
/* ---------------------------------------------------------- * 文件名称:BitmapUtil.cpp * * 作者:秦建辉 * * MSN:splashcn@msn.com * QQ:36748897 * * 博客:http://www.firstsolver.com/wordpress/ * * 开发环境: * Qt Creator 2.4.1 * * 版本历史: * * V1.0 2012年07月31日 * 从16位图像的Base64编码字符串复原图像 ------------------------------------------------------------ */ #include <QString> #include <QByteArray> #include <QImage> // 从Bgr565图像的Base64编码字符串复原图像 QImage* ImageFromBgr565Base64String(int width, int height, const QString& base64String, bool isBigEndian = false) { QByteArray Data = QByteArray::fromBase64(base64String.toAscii()); if(Data.length() != ((width * height) << 1)) { // 图像不符合大小要求 return NULL; } QImage* Image = new QImage(width, height, QImage::Format_RGB16); int Index = 0; for(int y = 0; y < height; y++) { for(int x = 0; x < width; x++) { uchar b1 = Data[Index++]; uchar b2 = Data[Index++]; if(isBigEndian) { uint Color = (((b1 >> 3) & 0x1f) << 19) + ((b1 & 7) << 13) + (((b2 >> 5) & 7) << 10) + ((b2 & 0x1f) << 3); Image->setPixel(x, y, Color); } else { uint Color = (((b2 >> 3) & 0x1f) << 19) + ((b2 & 7) << 13) + (((b1 >> 5) & 7) << 10) + ((b1 & 0x1f) << 3); Image->setPixel(x, y, Color); } } } return Image; } // 从Bgr555图像的Base64编码字符串复原图像 QImage* ImageFromBgr555Base64String(int width, int height, const QString& base64String, bool isBigEndian = false) { QByteArray Data = QByteArray::fromBase64(base64String.toAscii()); if(Data.length() != ((width * height) << 1)) { // 图像不符合大小要求 return NULL; } QImage* Image = new QImage(width, height, QImage::Format_RGB555); int Index = 0; for(int y = 0; y < height; y++) { for(int x = 0; x < width; x++) { uchar b1 = Data[Index++]; uchar b2 = Data[Index++]; if(isBigEndian) { uint Color = (((b1 >> 2) & 0x1f) << 19) + ((b1 & 3) << 14) + (((b2 >> 5) & 7) << 11) + ((b2 & 0x1f) << 3); Image->setPixel(x, y, Color); } else { uint Color = (((b2 >> 2) & 0x1f) << 19) + ((b2 & 3) << 14) + (((b1 >> 5) & 7) << 11) + ((b1 & 0x1f) << 3); Image->setPixel(x, y, Color); } } } return Image; }