Графический объект к файлу изображения

Они не то же самое.

Рассматривают эти запросы:

SELECT *
FROM Orders
LEFT JOIN OrderLines ON OrderLines.OrderID=Orders.ID
WHERE Orders.ID = 12345

и

SELECT *
FROM Orders
LEFT JOIN OrderLines ON OrderLines.OrderID=Orders.ID 
    AND Orders.ID = 12345

первое возвратит порядок и его строки, если таковые имеются, для номера заказа 12345. Второе возвратит все заказы, но только порядок 12345 будет иметь любые строки связанными с ним.

С INNER JOIN, пункты эффективно эквивалентны. Однако просто, потому что они - функционально то же, в этом они приводят к тем же результатам, не означает, что два вида пунктов имеют то же семантическое значение.

9
задан Bo Persson 13 May 2012 в 17:35
поделиться

2 ответа

Объект Graphics , который вы получаете из Graphics.FromImage , является поверхностью рисования для изображения. Таким образом, вы можете просто сохранить объект изображения, когда закончите.

string fileName = AppDomain.CurrentDomain.BaseDirectory + "Cropper/tests/castle.jpg");
using (Image image = Image.FromFile(fileName)
{
    using (Graphics graphic = Graphics.FromImage(image))
    {
        // Crop and resize the image.
        Rectangle destination = new Rectangle(0, 0, 200, 120);
        graphic.DrawImage(image, destination, int.Parse(X1.Value), int.Parse(Y1.Value), int.Parse(Width.Value), int.Parse(Height.Value), GraphicsUnit.Pixel);
    }
    image.Save(fileName);
}

Имейте в виду, что повторное выполнение этой операции с изображением в формате jpg может быть плохим делом; изображение перекодируется каждый раз, и, поскольку jpg использует метод деструктивного сжатия, вы каждый раз будете терять качество изображения. Я бы не стал беспокоиться об этом, если это операция один раз для каждого изображения.

11
ответ дан 4 December 2019 в 12:20
поделиться

Нет, объект Графика не содержит данных изображения, он используется для рисования на холсте, который обычно является экран или объект Bitmap .

Итак, вам нужно создать объект Bitmap с правильным размером для рисования и создать объект Graphics для это растровое изображение. Тогда вы можете сохранить это. Помните, что объект, реализующий IDisposable , должен быть удален, например, с помощью предложения using :

using (Image image = Image.FromFile(AppDomain.CurrentDomain.BaseDirectory + "Cropper/tests/castle.jpg")) {

   // Create bitmap
   using (Bitmap newImage = new Bitmap(200, 120)) {

      // Crop and resize the image.
      Rectangle destination = new Rectangle(0, 0, 200, 120);
      using (Graphics graphic = Graphics.FromImage(newImage)) {
         graphic.DrawImage(image, destination, int.Parse(X1.Value), int.Parse(Y1.Value), int.Parse(Width.Value), int.Parse(Height.Value), GraphicsUnit.Pixel);
      }
      newImage.Save(AppDomain.CurrentDomain.BaseDirectory + "Cropper/tests/castle_icon.jpg", ImageFormat.Jpeg);
   }
}
5
ответ дан 4 December 2019 в 12:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: