1 #include "picturewidget.h"
2 #include "ui_picturewidget.h"
3 #include "main_desktop.h"
4 #include "midwindow.h"
5 #include "frmmessagebox.h"
6 #include <QTextCodec>
7 extern main_desktop *g_pStaticMaindesktop;
8 // This is available in all editors.
9 extern QFileInfo fileInfo_to_show;
10 const QString win_path="E:/tech_practise/DvrUI/DvrUI/";
11 //const QString linux_path="/mnt/sdcard/mmcblk1p1/frontVideo/";//sdcard
12 extern QString linux_usb_path;//U
13 extern QString linux_sdcard_path;//sd
14 extern QString prase_path(QString linux_path);
15 extern QString print_info(unsigned char tmp[],int tmp2);
16 #include<stdio.h>
17 #include<string.h>
18 #include<sys/types.h>
19 #include<iostream>
20 using namespace std;
21 #pragma pack(2)
22 typedef struct BITMAPFILEHEADER
23 {
24 u_int16_t bfType;
25 u_int32_t bfSize;
26 u_int16_t bfReserved1;
27 u_int16_t bfReserved2;
28 u_int32_t bfOffBits;
29 }BITMAPFILEHEADER;
30
31 typedef struct BITMAPINFOHEADER
32 {
33 u_int32_t biSize;
34 u_int32_t biWidth;
35 u_int32_t biHeight;
36 u_int16_t biPlanes;
37 u_int16_t biBitCount;
38 u_int32_t biCompression;
39 u_int32_t biSizeImage;
40 u_int32_t biXPelsPerMeter;
41 u_int32_t biYPelsPerMeter;
42 u_int32_t biClrUsed;
43 u_int32_t biClrImportant;
44 }BITMAPINFODEADER;
showBmpInforHead(BITMAPFILEHEADER & pBmpHead,BITMAPINFODEADER & pBmpInforHead)45 void showBmpInforHead(BITMAPFILEHEADER &pBmpHead,BITMAPINFODEADER &pBmpInforHead)
46 {
47 qDebug()<<"file type:"<<pBmpHead.bfType;
48 qDebug()<<"file size:"<<pBmpHead.bfSize;
49 qDebug()<<"reverse_1:"<<pBmpHead.bfReserved1;
50 qDebug()<<"reverse_2:"<<pBmpHead.bfReserved2;
51 qDebug()<<"bitmap data offsets:"<<pBmpHead.bfOffBits;
52
53 qDebug()<<"struct BITMAPINFODEADER size:"<<pBmpInforHead.biSize;
54 qDebug()<<"width:"<<pBmpInforHead.biWidth;
55 qDebug()<<"height:"<<pBmpInforHead.biHeight;
56 qDebug()<<"biPlanes:"<<pBmpInforHead.biPlanes;
57 qDebug()<<"biBitCount:"<<pBmpInforHead.biBitCount;
58 qDebug()<<"comprass:"<<pBmpInforHead.biCompression;
59 qDebug()<<"biSizeImage ,bit map data size:"<<pBmpInforHead.biSizeImage;
60 qDebug()<<"x resolution:"<<pBmpInforHead.biXPelsPerMeter;
61 qDebug()<<"y resolution:"<<pBmpInforHead.biYPelsPerMeter;
62 qDebug()<<"color count:"<<pBmpInforHead.biClrUsed;
63 qDebug()<<"important color count:"<<pBmpInforHead.biClrImportant;
64 }
show_bitmap_info(QString path)65 void show_bitmap_info(QString path)
66 {
67 FILE *fp = fopen((char*)path.toStdString().c_str(), "rb");
68 if(fp==NULL)
69 {
70 qDebug()<<"open file error";
71 return ;
72 }
73 BITMAPFILEHEADER head;
74 BITMAPINFODEADER info;
75
76 fread(&head, sizeof(BITMAPFILEHEADER),1, fp);
77 fread(&info,sizeof(BITMAPINFODEADER), 1, fp);
78
79 showBmpInforHead(head,info);
80 }
81 extern MidWindow *g_MidWindow;
82 const int W_ICONSIZE = 100;
83 const int H_ICONSIZE = 100;
84 const int H_ITEMSIZE = 120;
pictureWidget(QWidget * parent)85 pictureWidget::pictureWidget(QWidget *parent) :
86 QDialog(parent),
87 ui(new Ui::pictureWidget)
88 {
89 ui->setupUi(this);
90
91 show_model=true;
92 ui->listWidget_file->clear();
93
94 show_file();
95
96 connect(this,SIGNAL(main_desktop_disvisible()),g_pStaticMaindesktop,SLOT(on_main_desktop_disvisible()));
97
98 connect(g_MidWindow,SIGNAL(usb_insert()),this,SLOT(on_usb_mount()));
99 connect(g_MidWindow,SIGNAL(usb_delete()),this,SLOT(on_usb_umount()));
100 connect(ui->listWidget_file,SIGNAL(clicked(QModelIndex)),this,SLOT(show_big_picture(QModelIndex)));
101
102 }
show_file()103 void pictureWidget::show_file()
104 {
105 qDebug()<<"pic widget is showing file";
106 #if defined(Q_OS_LINUX)
107 qDebug()<<"now path is "<<linux_usb_path;
108 //file_list=GetFileList(prase_path(linux_usb_path));
109 #else
110 file_list=GetFileList(QDir(win_path));
111 #endif
112 ui->listWidget_file->setObjectName(QString::fromUtf8("listWidget_file"));
113 ui->listWidget_file->setMovement(QListView::Static);
114
115 ui->listWidget_file->setSelectionMode(QAbstractItemView::ExtendedSelection);
116
117 ui->listWidget_file->setSpacing(12);
118 ui->listWidget_file->setResizeMode(QListView::Adjust);
119 if(show_model){
120
121 ui->listWidget_file->setViewMode(QListView::IconMode);
122 ui->listWidget_file->setIconSize(QSize(100,100));
123
124 ui->listWidget_file->setDragEnabled(false);
125 show_file_by_iconview(file_list);
126 }else{
127 ui->listWidget_file->setViewMode(QListView::ListMode);
128 ui->listWidget_file->setDragEnabled(false);
129 ui->listWidget_file->setIconSize(QSize(22,22));
130 show_file_by_listview(file_list);
131 }
132 }
~pictureWidget()133 pictureWidget::~pictureWidget()
134 {
135 delete ui;
136 }
on_usb_mount()137 void pictureWidget::on_usb_mount()
138 {
139 qDebug()<<"picwidget get the signal usb insert";
140 show_file();
141 }
on_usb_umount()142 void pictureWidget::on_usb_umount()
143 {
144 qDebug()<<"picwidget get the signal usb delete";
145 ui->listWidget_file->clear();
146 }
GetFileList(QDir dir)147 QFileInfoList pictureWidget::GetFileList(QDir dir)
148 {
149 qDebug()<<"GetFileList:"<<"now path is :"<<dir.path();
150 qDebug()<<"get all file name";
151 QStringList filters;
152 filters << "*.bmp"<<"*.jpg"<<"*.jpeg"<<"*.png";
153 dir.setNameFilters(filters);
154
155 QFileInfoList file_list=dir.entryInfoList();
156 for(int i=0;i<file_list.size();i++)
157 {
158 QFileInfo fileInfo=file_list.at(i);
159 fileInfo.absoluteFilePath();
160 // qDebug()<<fileInfo.fileName();
161 }
162 return file_list;
163 }
covert_image_format(QString tempFilePath)164 QImage covert_image_format(QString tempFilePath)
165 {
166 QImage image(tempFilePath);
167 QImage currentImage;
168 if(image.format() == QImage::Format_Mono)
169 {
170 qDebug() << "format_mono";
171 currentImage = image.convertToFormat(QImage::Format_Mono);
172 }
173 else if(image.format() == QImage::Format_MonoLSB)
174 {
175 qDebug() << "format_monoLSB";
176 currentImage = image.convertToFormat(QImage::Format_MonoLSB);
177 }
178 else if(image.format() == QImage::Format_Indexed8)
179 {
180 qDebug() << "QImage::Format_Indexed8";
181 currentImage = image.convertToFormat(QImage::Format_Indexed8);
182 }
183 else if(image.format() == QImage::Format_RGB32)
184 {
185 qDebug() << "QImage::Format_RGB32";
186 currentImage = image.convertToFormat(QImage::Format_RGB32);
187 }
188 else if(image.format() == QImage::Format_ARGB32)
189 {
190 qDebug()<<"QImage::Format_ARGB32";
191 currentImage = image.convertToFormat(QImage::Format_ARGB32);
192 }
193
194 else if(image.format() ==QImage::Format_ARGB32_Premultiplied)
195 {
196 qDebug()<<"QImage::Format_ARGB32_Premultiplied";
197 currentImage = image.convertToFormat(QImage::Format_ARGB32_Premultiplied);
198 }
199
200 else if(image.format() == QImage::Format_RGB16)
201 {
202 qDebug("QImage::Format_RGB16");
203 currentImage = image.convertToFormat(QImage::Format_RGB16);
204 }
205
206 else if(image.format() == QImage::Format_ARGB8565_Premultiplied)
207 {
208 qDebug()<<"QImage::Format_ARGB8565_Premultiplied";
209 currentImage = image.convertToFormat(QImage::Format_ARGB8565_Premultiplied);
210 }
211
212 else if(image.format() == QImage::Format_RGB666)
213 {
214 qDebug()<<"QImage::Format_RGB666";
215 currentImage = image.convertToFormat(QImage::Format_RGB666);
216 }
217
218 else if(image.format() == QImage::Format_ARGB6666_Premultiplied)
219 {
220 qDebug()<<"QImage::Format_ARGB6666_Premultiplied";
221 currentImage = image.convertToFormat(QImage::Format_ARGB6666_Premultiplied);
222 }
223
224 else if(image.format() == QImage::Format_RGB555)
225 {
226 qDebug()<<"QImage::Format_RGB555";
227 currentImage = image.convertToFormat(QImage::Format_RGB555);
228 }
229
230 else if(image.format() == QImage::Format_ARGB8555_Premultiplied)
231 {
232 qDebug()<<"QImage::Format_ARGB8555_Premultiplied";
233 currentImage = image.convertToFormat(QImage::Format_ARGB8555_Premultiplied);
234 }
235
236 else if(image.format() == QImage::Format_RGB888)
237 {
238 qDebug()<<"QImage::Format_RGB888";
239 currentImage = image.convertToFormat(QImage::Format_RGB888);
240 }
241
242 else if(image.format() == QImage::Format_RGB444)
243 {
244 qDebug()<<"QImage::Format_RGB444";
245 currentImage = image.convertToFormat(QImage::Format_RGB444);
246 }
247 else if(image.format() == QImage::Format_ARGB4444_Premultiplied)
248 {
249 qDebug()<<"QImage::Format_ARGB4444_Premultiplied";
250 currentImage = image.convertToFormat(QImage::Format_ARGB4444_Premultiplied);
251 }
252 else
253 {
254 qDebug()<<"unkown format";
255 currentImage = image;
256 }
257 return currentImage;
258 }
show_file_by_iconview(QFileInfoList file_list)259 void pictureWidget::show_file_by_iconview(QFileInfoList file_list)
260 {
261 qDebug()<<"show_file_by_iconview";
262 qDebug()<<"file_list has "<<file_list.size()<<" files";
263 ui->listWidget_file->setIconSize(QSize(100,100));
264 for(int i=0;i<file_list.size();i++)
265 {
266 QFileInfo file_info=file_list.at(i);
267 QString tempFilePath=file_info.absoluteFilePath();
268 int filename_index=tempFilePath.lastIndexOf("/");
269 QString tempFileName=tempFilePath.right(tempFilePath.size()-filename_index-1);
270 qDebug()<<"file name:"<<tempFileName;
271 QString tempFileName_NoSuffix=tempFileName;
272 int suffix_index=tempFileName_NoSuffix.lastIndexOf(".");
273 QString suffix=tempFileName.right(tempFileName.size()-suffix_index-1);
274 qDebug()<<"suffix is:"<<suffix;
275 tempFileName_NoSuffix.truncate(suffix_index);
276 // qDebug()<<"the no_suffix filename:"<<tempFileName_NoSuffix;
277 QPixmap objPixmap;
278 if(suffix=="bmp")
279 {
280 show_bitmap_info(tempFilePath);
281 //QImage image=covert_image_format(tempFilePath);
282 //qDebug()<<"is a bitmap"<<tempFileName<<"imageformat"<<image.format();
283 //objPixmap.fromImage(image);
284 }else{
285 qDebug()<<"not a bitmap";
286 objPixmap=QPixmap(tempFilePath);
287 }
288 QTextCodec *codec = QTextCodec::codecForName("GB2312");
289 QString str = codec->toUnicode(tempFileName.toLatin1().data());
290 if(objPixmap.isNull())
291 {
292 objPixmap=QPixmap(":/icon/no_shotvideo.png");
293 }
294 QListWidgetItem *pItem = new QListWidgetItem(QIcon(objPixmap.scaled(QSize(W_ICONSIZE,H_ICONSIZE))),str);
295 pItem->setSizeHint(QSize(W_ICONSIZE,H_ITEMSIZE));
296 ui->listWidget_file->addItem(pItem);
297 }
298 }
show_file_by_listview(QFileInfoList file_list)299 void pictureWidget::show_file_by_listview(QFileInfoList file_list)
300 {
301 ui->listWidget_file->setIconSize(QSize(22,22));
302 for(int i=0;i<file_list.size();i++)
303 {
304 QFileInfo file_info=file_list.at(i);
305 QString tempFilePath=file_info.absoluteFilePath();
306 int filename_index=tempFilePath.lastIndexOf("/");
307 QString tempFileName=tempFilePath.right(tempFilePath.size()-filename_index-1);
308
309 // qDebug()<<"file name:"<<tempFileName;
310 QString tempFileName_NoSuffix=tempFileName;
311 int suffix_index=tempFileName_NoSuffix.lastIndexOf(".");
312 tempFileName_NoSuffix.truncate(suffix_index);
313 // qDebug()<<"the no_suffix filename:"<<tempFileName_NoSuffix;
314
315 QPixmap objPixmap(tempFilePath);
316 QListWidgetItem *pItem = new QListWidgetItem(QIcon(objPixmap.scaled(QSize(20,20))),tempFileName);
317 pItem->setSizeHint(QSize(W_ICONSIZE,H_ITEMSIZE));
318 ui->listWidget_file->addItem(pItem);
319 }
320 }
show_big_picture(QModelIndex pos)321 void pictureWidget::show_big_picture(QModelIndex pos)
322 {
323 QListWidgetItem* item=ui->listWidget_file->currentItem();
324 qDebug()<<"filename"<<item->text();
325 qDebug()<<"which file:"<<pos.row();
326
327 fileInfo_to_show=file_list.at(pos.row());
328 QImage pic;
329 pic.load(fileInfo_to_show.absoluteFilePath());
330 if(pic.isNull())
331 {
332 frmMessageBox *msg=new frmMessageBox(this);
333 msg->SetMessage(QString(tr("this image format can't attach!")),0);
334 QTimer::singleShot(2000, msg, SLOT(close()));
335 msg->exec();
336 return ;
337 }else{
338 picture_views=new Picture_view(this);
339 g_pStaticMaindesktop->on_main_desktop_disvisible();
340 picture_views->showNormal();
341 }
342 }
deal_picture_views_signal()343 void pictureWidget::deal_picture_views_signal()
344 {
345
346 }
347