2014-06-15 2 views
0

Я пытаюсь прочитать изображение в файл. И я пишу ниже код;Прочтите изображение в картинке

  for (int i = 0; i < filePaths.Length; i++) 
      { 
       pictureBox1.Image = imList.Images[i]; 
       pictureBox1.SizeMode = PictureBoxSizeMode.Normal; 
       Application.DoEvents(); 
       Thread.Sleep(1000); 
      } 

Но разрешение изображений очень плохо. Когда я пишу только код ниже;

pictureBox1.Image = imList.Images[i]; 
pictureBox1.SizeMode = PictureBoxSizeMode.Normal; 

Не проблема. Разрешение хорошее. Я попробовал разный режим, но не изменился. В чем моя проблема? Заранее спасибо.


Код, добавленный с комментариев.

ImageList imList = new ImageList(); 

В петле здесь

filePath = @"C:\Users\OSMAN\documents\visual studio 2013\Projects\WindowsFormsApplication2\WindowsFormsApplication2\Yaprak\" + j ; string[] filePaths = Directory.GetFiles(filePath,"*.jpg"); 
+0

Что я могу сказать в вашей второй части кода? Если у него нет петли? –

+0

Отсутствие проблемы с разрешением петли. – user3425879

+0

Что такое 'imList' и что такое' filePaths'? Здесь не так. Вы должны четко указать свое требование. – Hassan

ответ

0

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

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Threading; 
using System.Threading.Tasks; 
using System.Windows.Forms; 

private void Form1_Load(object sender, EventArgs e) 
    { 
     var left = pictureBox1.Left; 
     var top = pictureBox1.Top; 
     var width = pictureBox1.Width; 
     var height = pictureBox1.Height; 
     var form = this; 
     var currPictureBox = pictureBox1; 

     new Thread(new ThreadStart(() => 
      { 
       for (var x = 1; x < 3; x++) 
       { 
        ExecuteSecure(() => 
        { 
         var pictureBox = new PictureBox 
         { 
          Width = width, 
          Height = height, 
          Top = top, 
          Left = left, 
          ImageLocation = @"C:\filelocation" + x + ".jpg" 
         }; 

         form.Controls.Remove(currPictureBox); 
         form.Controls.Add(pictureBox); 
         currPictureBox = pictureBox; 
         form.Refresh(); 
        }); 

        Thread.Sleep(1000); 
       } 
      })).Start(); 
    } 

    private void ExecuteSecure(Action a) 
    { 
     if (InvokeRequired) BeginInvoke(a); 
     else a(); 
    } 
+0

Ну, я хочу, как слайд-шоу, быстрое слайд-шоу. Около 0,2 секунды или меньше. Как я могу добиться успеха на C#. Благодарю. – user3425879

1

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

Лучшим подходом было бы не загружать изображения из потока пользовательского интерфейса; вместо этого запускайте отдельный поток и спать там столько, сколько необходимо. В следующем примере предположим, что вы запускаете процесс с момента нажатия кнопки:

private void button1_Click(object sender, EventArgs e) 
{ 

    Task.Factory.StartNew(() => LoadPics()); 

    // if TPL not available 
    // use Action delegate 
    // Not showing endinvoke here 
    // var action = new Action(LoadPics); 
    // action.BeginInvoke(null, null); 
} 

private void SetImage(Image img) 
{ 
    pictureBox1.Image = img; 
    pictureBox1.SizeMode = PictureBoxSizeMode.Normal; 
} 

private void LoadPics() 
{  
    for (int i = 0; i < filePaths.Length; i++) 
    { 
     // Invoke UI thread for changing picture 
     pictureBox1.Invoke(new Action(() => SetImage(imList.Images[i]))); 
     Thread.Sleep(1000); 
    } 
} 
Смежные вопросы