2008-11-25 2 views
0
  1. Я хочу создать прокручиваемый список изображений, извлеченных из Интернета, и дать пользователю возможность щелкнуть по нему. Как мне это сделать в WinForms/C#? Можно ли добавить элемент управления/управления изображением в listBox?Извлечение изображений из сети и их последовательное отображение

  2. Я попытался добавить список изображений в UserControl с AutoScroll, установленным в true, что даст мне ощущение, как использовать listBox. Правильно ли это?

  3. Я также попытался установить ImageLocation pictureBox на URI изображения, а затем загрузить Load(), чтобы загрузить изображение, оно действительно работало, однако моя форма замерзает! Как я могу обновлять каждый из ящиков изображений последовательным образом, не замораживая свою форму?

Спасибо, Azlam

ответ

1

Я отвечу на ваш третий вопрос первый, becuase это только один я действительно знаю ответ. В поле изображения есть метод LoadAsync(), который загрузит изображение в отдельном потоке и не повесит ваше приложение.

Что касается других вопросов, я тоже, скорее всего, начинаю с пользовательского элемента управления и размещаю изображения там. Единственное, что я могу предложить, это сначала создать пользовательский элемент управления, в котором есть окно с картинкой, и, возможно, многострочный текстовый блок или richtextbox рядом с ним. Отключите рамку в текстовом поле и слегка опустите вокруг всего элемента управления. Это позволит вам отображать изображение, рядом с ним текст. Тогда ваш фактический окончательный контроль будет просто набором этих элементов управления с возможностью их добавления по мере необходимости.

--my 2 цента ...

+0

Спасибо, позвольте мне попробовать метод loadAsync(), я делаю точный способ, который вы упоминали – Azlam 2008-11-26 04:31:58

0

Вы не возражаете, бегущая по вертикали?

Я хотел бы начать с контролем DataGridView в качестве основы и создать следующую реализацию:

1) Создание пользовательских столбцов и тип клеток, производный от DataGridViewImageColumn. Вы можете назвать их «CronosNetImageColumn», «CronosNetImageCell».

2) Создайте класс «CronosImageDetails» для хранения данных соты (включая свойства для отображения текста и URL-адреса изображения). Это будет передано как значение для каждой ячейки. Пример:

ImageGrid.Rows.Add (новый CronosImageDetails {DisplayText = "День на пляже", ImageURL = "http: //...beach.jpg"});

3) Перекройте ячейку Paint(), чтобы использовать WebClient для получения изображения и использовать e.Graphics.DrawImage (ImageObtainedFromWebClient), чтобы нарисовать изображение в ячейке. Вы можете использовать e.Graphics.DrawString ((CronosImageDetails) value.DisplayText, ...) для наложения текста в ячейку.

Это быстрое решение предоставит вам прокручивающийся имидж, который загружает изображения только в том случае, если пользователь прокручивает список и обеспечивает прочную основу для улучшения.

Рекомендуемые дальнейшие оптимизации:

A) Создание BackBuffer битовой карты и графики для рисования данных ячейки.

B) Paint Setup(), чтобы просто покрасить BackBuffer вместо того, чтобы делать работу, чтобы получить изображение

C) создать новый метод клеточной LoadImage(), что порождает новый поток, который загружает изображение и рисует его на задний буфер.

D) Имейте Paint() (или отдельную вспомогательную резьбу), отслеживайте направление и ускорение прокрутки и оценивайте, какие ячейки необходимо предварительно загрузить. Trigger LoadImage() для этих ячеек.

E) Инициализируйте задний буфер каждой ячейки загрузочным изображением.

F) Отслеживайте и используйте эмпирические данные из времени загрузки изображения, чтобы определить, какие ячейки необходимо предварительно загрузить.

Смежные вопросы