Они не то же самое.
Рассматривают эти запросы:
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
, пункты эффективно эквивалентны. Однако просто, потому что они - функционально то же, в этом они приводят к тем же результатам, не означает, что два вида пунктов имеют то же семантическое значение.
Объект 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 использует метод деструктивного сжатия, вы каждый раз будете терять качество изображения. Я бы не стал беспокоиться об этом, если это операция один раз для каждого изображения.
Нет, объект Графика
не содержит данных изображения, он используется для рисования на холсте, который обычно является экран или объект 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);
}
}