User 6976447 Ответов: 0

Наложение растрового изображения приводит к искаженному результату


Я использую пользовательский класс для записи изображения на другое изображение большего размера.

Я использую пользовательский класс для записи изображения на другое изображение большего размера size.doc -Google Диск[^]

публичный класс BitmapLockerTest
{
private static string path = @ " locker. png";

public static void Run()
{
Растровое изображение = оттенки серого.ToGrayscale(Bitmap. FromFile(path) as Bitmap);
Растровый холст = оттенки серого.CreateGrayscaleImage (1024, 256);
BitmapLocker imageLocker = новый BitmapLocker(изображение);
BitmapLocker canvasLocker = новый BitmapLocker(canvas);
imageLocker.Замок();
canvasLocker.Замок();
int startX = (Math. Abs (canvas.Ширина-изображение.Ширина) / 2);
инт старты = (математика.АБС(холст.Высота-изображение.Высота) / 2);
for (int y = startY; y < (startY + image.Высота); y++)
{
для (тип int х = команды StartX; х &ЛТ; (командой StartX + изображения.Ширина); x++)
{
int xxx = x-startX;
инт ыыы = г - старты;
canvasLocker.SetPixel(x, y, imageLocker.GetPixel (xxx, yyy));
}
}

canvasLocker.Разблокировка();
imageLocker.Разблокировка();
новая форма PictureBoxForm (холст, изображение).Метод showdialog();
}
}

Вот полный исходный код в DotNetFiddle.

Главная | .Чистая Скрипка[^]

Но это порождает искаженное изображение:

http://i.stack.imgur.com/rm3Nw.png[^]

Введите описание изображения здесь

Вероятно, возникли какие-то проблемы с чтением и написанием адресов.

Но я не могу найти здесь проблему.


П. С. 2 :

Вот входное изображение[^]

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

публичный класс BitmapLockerTest
{
private static string path = @ " locker. png";

public static void Run()
{
Растровое изображение = оттенки серого.ToGrayscale(Bitmap. FromFile(path) as Bitmap);
Растровый холст = оттенки серого.CreateGrayscaleImage (1024, 256);
BitmapLocker imageLocker = новый BitmapLocker(изображение);
BitmapLocker canvasLocker = новый BitmapLocker(canvas);
imageLocker.Замок();
canvasLocker.Замок();
int startX = (Math. Abs (canvas.Ширина-изображение.Ширина) / 2);
инт старты = (математика.АБС(холст.Высота-изображение.Высота) / 2);
for (int y = startY; y < (startY + image.Высота); y++)
{
для (тип int х = команды StartX; х &ЛТ; (командой StartX + изображения.Ширина); x++)
{
int xxx = x-startX;
инт ыыы = г - старты;
canvasLocker.SetPixel(x, y, imageLocker.GetPixel (xxx, yyy));
}
}

canvasLocker.Разблокировка();
imageLocker.Разблокировка();
новая форма PictureBoxForm (холст, изображение).Метод showdialog();
}
}

0 Ответов