1. C# / Говнокод #2343

    +135.4

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    public static BitmapImage ConvertBitmapToBitmapImage(Bitmap bitmap)
            {
                var bitMapImage = new BitmapImage();
                var ms = new MemoryStream();
    
                try
                {
                    bitmap.Save(ms, ImageFormat.Bmp);
                    bitMapImage.BeginInit();
                    bitMapImage.StreamSource = ms;
                    bitMapImage.EndInit();
                }
                catch (NotSupportedException e)
                {
                    try
                    {
                        bitMapImage = new BitmapImage();
                        bitmap.Save(ms, ImageFormat.Png);
                        bitMapImage.BeginInit();
                        bitMapImage.StreamSource = ms;
                        bitMapImage.EndInit();
                    }
                    catch (NotSupportedException e2)
                    {
                        bitMapImage = new BitmapImage();
                        bitmap.Save(ms, ImageFormat.Bmp);
                        ms.Write(ms.ToArray(), 78, (int)(ms.Length - 78));
                        bitMapImage.BeginInit();
                        bitMapImage.StreamSource = ms;
                        bitMapImage.EndInit();
                    }
                }
    
                return bitMapImage;
            }

    wpf + System.Drawing + sql и хз что со всем этим делать )))))

    Запостил: walash, 28 Декабря 2009

    Комментарии (8) RSS

    • а где тут sql?
      Ответить
    • try-catch в блоке catch доставляетъ.
      Ответить
    • мда, "умелая" работа с исключениями... Inner Exception сохранять совсем необязательно... магические числа... MemoryStream конечно же закрывать не надо если что то не получилось... дублирование функционала... говнокод однозначно. +1
      Ответить
      • при современных обьемах оперативки программисту совершенно не обязательно отвлекатся на такие мелочи, как освобождение неуправляемых ресурсов. это отвлекает от полета мысли)))))))
        Ответить
    • ms.ToArray(), 78, (int)(ms.Length - 78)

      вот это говно надо, когда забираешь из БД byte[]

      а есть предложения, как это красивее, правильнее написать?
      Ответить
      • Хотя бы так (SomeValue - нужно назвать в зависимости от того что это число означает):
        private const int SomeValue = 78;
        ....
        ms.ToArray(), SomeValue, ms.Length - SomeValue
        А вообще по хорошему этот метод следует разбить на 2 или даже на 3
        Ответить
        • Придумал! наверное . . .

          public static BitmapImage ConvertBitmapToBitmapImage(Bitmap bitmap) 
                  {
                      var bitMapImage = new BitmapImage();
                      var ms = new MemoryStream();
                      var processed = true;
          
                      try
                      {
                          bitmap.Save(ms, ImageFormat.Bmp);
                          bitMapImage.BeginInit();
                          bitMapImage.StreamSource = ms;
                          bitMapImage.EndInit();
                      }
                      catch (NotSupportedException e)
                      {
                          processed = false;
                      }
          
          
                      if(!processed)
                      {
                          try
                          {
                              bitMapImage = new BitmapImage();
                              bitmap.Save(ms, ImageFormat.Png);
                              bitMapImage.BeginInit();
                              bitMapImage.StreamSource = ms;
                              bitMapImage.EndInit();
                              processed = true;
                          }
                          catch (NotSupportedException e)
                          {
                          }
                      }
          
                      if(!processed)
                      {
                          try
                          {
          
                                  bitMapImage = new BitmapImage();
                                  bitmap.Save(ms, ImageFormat.Bmp);
                                  ms.Write(ms.ToArray(), 78, (int)(ms.Length - 78));
                                  bitMapImage.BeginInit();
                                  bitMapImage.StreamSource = ms;
                                  bitMapImage.EndInit();
                                  processed = true;
                          }
                          catch(NotSupportedException e)
                          {
                          }
                      }
          
                      if(!processed)
                      {
                          throw new ArgumentException("You've passed in my method some stuff!");
                      }
          
                      return bitMapImage;
                  }



          хотя все равно какое то гавно
          Ответить
          • может так?

            public static BitmapImage ConvertBitmapToBitmapImage(Bitmap bitmap)
                    {
                        return 
                            _ConvertBitmapToBitmapImage(bitmap, ImageFormat.Bmp, false) ??
                            _ConvertBitmapToBitmapImage(bitmap, ImageFormat.Png, false) ?? 
                            _ConvertBitmapToBitmapImage(bitmap, ImageFormat.Bmp, true);
                    }
            
                    static BitmapImage _ConvertBitmapToBitmapImage(Bitmap bitmap, ImageFormat img, bool cutBytes)
                    {
                        var bitMapImage = new BitmapImage();
                        using (var ms = new MemoryStream())
                        {
                            try
                            {
                                bitmap.Save(ms, img);
                                if (cutBytes) //btw, wtf? adding same content in the end of memory stream? 
                                    ms.Write(ms.ToArray(), 78, (int)(ms.Length - 78));
                                bitMapImage.BeginInit();
                                bitMapImage.StreamSource = ms;
                                bitMapImage.EndInit();
                                return bitMapImage;
                            }
                            catch (NotSupportedException)
                            {
                                return null;
                            }
                        }
                    }


            особые извращенцы могут запихнуть все в один метод с помощью лямбды
            Ответить

    Добавить комментарий