Reden Rodriguez Ответов: 2

Как исправить общую ошибку, возникшую в GDI+ при создании изображения штрих-кода


я генерирую изображение штрих-кода вместе с номером на нем и печатаю его,если я создам другой штрих-код с другим номером или тем же номером, это вызовет ошибку в
bm.Save("temp.gif");
вот мой код

private void btnSave_Click(object sender, EventArgs e)
       {
           Barcode128 code = new Barcode128();
           RandomGenerator generator = new RandomGenerator();
           try
           {
               int rand = generator.RandomNumber(0, 1234567890);
               label1.Text = rand.ToString();
               string barcode = rand.ToString();
               code.Size = 10F;
               code.CodeType = Barcode.CODE128;
               code.ChecksumText = false;
               code.GenerateChecksum = false;
               code.StartStopText = false;
               if (barcode.Length == 19)
               {
                   barcode = "0" + barcode;
               }
               code.Code = barcode;
               Bitmap bm = new Bitmap(code.CreateDrawingImage(Color.Black, Color.White));
               bm.Save("temp.gif");
               picBarcode1.Load("temp.gif");
               using (FolderBrowserDialog fdb = new FolderBrowserDialog())
               {
                   fdb.Description = "fdf";
                   if (fdb.ShowDialog() == DialogResult.OK)
                   {
                       picBarcode1.Image.Save(@fdb.SelectedPath + "\\Image" + DateTime.Now.ToString("ddMMyyyyHHmmss") + ".jpg", System.Drawing.Imaging.ImageFormat.Jpeg);
                       MessageBox.Show("Barcode Image saved Successfully. Path : " + fdb.SelectedPath);
                   }
               }
           }
           catch (Exception)
           {
               throw;
           }
       }


Что я уже пробовал:

я попытался сделать кнопку "назад", и она отлично работает, но я не хочу снова и снова возвращаться туда и обратно.

2 Ответов

Рейтинг:
0

OriginalGriff

Вам придется (посмотреть / поговорить с людьми, которые написали) ваш класс Barcode128 - мы понятия не имеем, что он делает и как его использовать, поэтому мы действительно, действительно не можем вам помочь.
Если бы мне пришлось гадать, я бы тоже это заподозрил code.CreateDrawingImage выбрасывает исключение (и это требует изучения методов класса, которых у нас нет) или возвращает данные, не относящиеся к изображению, такие как текст или пустой массив байтов.

Используйте отладчик, чтобы точно узнать, где это происходит, и что именно отправляется в конструктор растрового изображения - разбить строку так, чтобы она была сохранена для быстрого просмотра, - это самый простой способ:

var returned = code.CreateDrawingImage(Color.Black, Color.White);
Bitmap bm = new Bitmap(returned);


Извините, но мы ничего не можем сделать для вас!


Reden Rodriguez

мне очень жаль, что в моем вопросе отсутствует некоторая информация об ошибке, произошедшей в bm.Сохранить("temp.gif"); кодекс.CreateDrawingImage код слова внутри него-это то место, где я поместил случайные числа, которые я сгенерировал, и спрятал их в изображении.

Рейтинг:
0

F-ES Sitecore

Когда вы получаете ошибку, всегда говорите, на какой линии она происходит. Тот факт, что вы не думаете, что строка, которая выдает ошибку, имеет отношение к решению вашей проблемы, немного беспокоит.

Если бы мне пришлось угадать (а мы должны угадать, так как не знаем, какая строка выдает ошибку), то это было бы потому, что вы экономите на temp.gif и этот файл заблокирован потому что вы не удалили предыдущее растровое изображение так что файл все еще используется

Bitmap bm = new Bitmap(code.CreateDrawingImage(Color.Black, Color.White));
bm.Save("temp.gif");
bm.Dispose(); // dispose the Bitmap when you're finished with it


Reden Rodriguez

Я попробовал это сделать но ничего не вышло