public void Read(BinaryReader reader)
                {
                    this.id       = reader.ReadInt64();
                    this.owner_id = reader.ReadInt64();
                    this.title    = reader.ReadString();

                    this.thumb = reader.ReadGeneric <ThumbData>();
                }
Exemple #2
0
    // Main function
    private void GenerateThumbnails()
    {
        while (true)
        {
            if (GenerateNewThumbnails)
            {
                m_bGenerationCompleted = false;

                lock (_ThumbnailsFiles)
                {
                    // Add a button for each file
                    for (int i = 0; i < _ThumbnailsFiles.Length; i++)
                    {
                        if (_ThumbnailsFiles[i].Extension.ToLower() == ".png" ||
                            _ThumbnailsFiles[i].Extension.ToLower() == ".jpg" ||
                            _ThumbnailsFiles[i].Extension.ToLower() == ".jpeg" ||
                            _ThumbnailsFiles[i].Extension.ToLower() == ".gif" ||
                            _ThumbnailsFiles[i].Extension.ToLower() == ".bmp")
                        {
                            ThumbData _data = new ThumbData();
                            _data._fullName = _ThumbnailsFiles[i].FullName;
                            _data._name     = _ThumbnailsFiles[i].Name;

                            try
                            {
                                System.Drawing.Image image = System.Drawing.Image.FromFile(_data._fullName);
                                System.Drawing.Image thumb = image.GetThumbnailImage(ThumbSize, ThumbSize, () => false, System.IntPtr.Zero);

                                _data._bytes = imageToByteArray(thumb);

                                if (image.Width == image.Height)
                                {
                                    _data.SizeX = ThumbSize;
                                    _data.SizeY = ThumbSize;
                                }
                                else if (image.Width > image.Height)
                                {
                                    _data.SizeX = ThumbSize;
                                    _data.SizeY = ThumbSize * ((float)image.Height / (float)image.Width);
                                }
                                else if (image.Width < image.Height)
                                {
                                    _data.SizeX = ThumbSize * ((float)image.Width / (float)image.Height);
                                    _data.SizeY = ThumbSize;
                                }

                                thumb.Dispose();
                                image.Dispose();
                            }
                            catch (System.ArgumentException e)
                            {
                                Debug.LogError("ArgumentException when generating thumbnail " + i + ".\n\n" + e.Message);
                            }
                            catch (System.IO.FileNotFoundException e)
                            {
                                Debug.LogError("FileNotFoundException when generating thumbnail " + i + ".\n\n" + e.Message);
                            }
                            catch (System.OutOfMemoryException e)
                            {
                                Debug.LogError("OutOfMemoryException when generating thumbnail " + i + ".\n\n" + e.Message);
                            }
                            catch
                            {
                                Debug.LogError("Unknow error when generating thumbnail " + i + ".\n\n");
                            }

                            lock (m_pImagesBytesArray)
                            {
                                m_pImagesBytesArray.Add(_data);
                            }

                            if (CancelThread || CancelGeneration)
                            {
                                break;
                            }
                        }
                    }
                }

                m_bGenerationCompleted = true;
                GenerateNewThumbnails  = false;
            }

            if (CancelThread)
            {
                CancelThread = false;
                break;
            }

            if (CancelGeneration)
            {
                m_bGenerationCompleted = true;
                GenerateNewThumbnails  = false;
                lock (m_pImagesBytesArray)
                {
                    m_pImagesBytesArray.Clear();
                }

                lock (_ThumbnailsFiles)
                {
                    _ThumbnailsFiles = new FileInfo[0];
                }
                CancelGeneration = false;
            }

            Thread.Sleep(100);
        }
    }