Nano Hash - криптовалюты, майнинг, программирование

Наклонить изображение к другому изображению

Я использую Visual Studio Express 2012. У меня есть основное фоновое изображение, и я хочу исказить изображение и добавить его к основному фону.

Пока у меня это:

'Create a new bitmap image of the transparent image

Dim overlay As New Bitmap("C:\TestFolder\rectangle.png")

'Create a new bitmap image of the image to you want the transparent image drawn onto

Dim pic As New Bitmap("C:\TestFolder\MyImage.png")

'Create a graphics object from the image to be drawn onto

Dim grx As Graphics = Graphics.FromImage(pic)

'Draw the transparent image into the picture

grx.DrawImage(overlay, 100, 100)

'Dispose the graphics object

grx.Dispose()

'Save the new image that you just put the transparent image on

pic.Save("C:\TestFolder\NewImage.jpg", Imaging.ImageFormat.Jpeg)

'Dispose both new bitmap images because they are not needed anymore

overlay.Dispose()
pic.Dispose()

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

EDIT Я также добавил этот код:

Dim destinationPoints As Point() = { _
    New Point(518, 0), _
    New Point(743, 0), _
    New Point(518, 288), _
    New Point(743, 377)}

Dim image As New Bitmap("C:\TestFolder\this.png")

' Draw the image unaltered with its upper-left corner at (0, 0)

e.Graphics.DrawImage(image, 518, 0)

' Draw the image mapped to the parallelogram

e.Graphics.DrawImage(image, destinationPoints)

Но каждый раз, когда я запускаю его, я получаю эту ошибку:

Произошло необработанное исключение типа «System.InvalidCastException» в WindowsApplication4.exe.

Дополнительная информация: невозможно привести объект типа «System.Windows.Forms.MouseEventArgs» к типу «System.Windows.Forms.PaintEventArgs».

15.08.2014

  • возможный дубликат Skew Image и добавить к другому изображению в Visual Базовый 15.08.2014
  • Пожалуйста, предоставьте скриншот, иллюстрирующий, чего вы пытаетесь достичь. 15.08.2014
  • @Neolisk вот ссылка на изображение: i.stack.imgur.com/UFsw2.png Я не могу добавить изображение в сообщение, так как у меня нет репутации 10. НИКАКИХ НАРУШЕНИЙ АВТОРСКИХ ПРАВ НЕ ПРЕДНАЗНАЧЕНО. 16.08.2014
  • Хорошо, мы приближаемся. Вы разместили два фрагмента кода. Пожалуйста, укажите, к чему они относятся, т. е. к какому обработчику событий или переопределению. 16.08.2014
  • @Neolisk Первый фрагмент кода работает. Он принадлежит кнопке и объединяет два изображения, которые я поместил в TestFolder. Вторая часть блока также принадлежит кнопке и должна искажать изображение, которое я хочу. Процесс заключается в том, чтобы нажать кнопку, чтобы перекосить изображение, а затем нажать кнопку, чтобы объединить два изображения вместе. 16.08.2014
  • e.Graphics не может принадлежать кнопке, потому что кнопка не имеет Graphics под своей переменной e в сигнатуре обработчика событий. 16.08.2014
  • @Neolisk, что мне тогда делать? 16.08.2014
  • @ user3902533: Проверьте мой ответ. 17.08.2014

Ответы:


1

Я создал пользовательский PictureBox, вы можете дополнительно расширить его, добавив свойства, определяющие фоновые и накладываемые изображения, а также динамически вычисляющие коэффициенты масштабирования. Я вырезал изображения из вашего вопроса с помощью MsPaint и сохранил их в виде двух отдельных файлов. Для использования поместите этот новый элемент управления в форму и убедитесь, что файлы изображений существуют в указанных местах.

Public Class CustomPictureBox : Inherits PictureBox

  Sub New()
    Me.Image = New Bitmap("C:\Admin\image_background.png")
  End Sub

  Protected Overrides Sub OnPaint(pe As PaintEventArgs)
    MyBase.OnPaint(pe)

    Dim image As New Bitmap("C:\Admin\image_overlay.png")

    Dim szScale As Size = image.Size
    szScale.Width /= 4.5
    szScale.Height /= 2

    Dim ptLocation As Point = New Point(98, -17)

    Dim destinationPoints As Point() = {
      ptLocation,
      ptLocation + New Point(szScale.Width, 20),
      ptLocation + New Point(0, szScale.Height)
    }

    pe.Graphics.DrawImage(image, destinationPoints)
  End Sub

End Class

Вот результат, который я получил:

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

Используя эти два файла:

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

Вы можете поиграть с параметрами, чтобы обеспечить лучшее соответствие, но этого должно быть достаточно, чтобы подтвердить концепцию.

Примечание. Почему у вас могут возникнуть проблемы с этим, потому что вам нужно 3, а не 4 точки назначения, чтобы сформировать параллелограмм, как указано в этой статье:

17.08.2014
  • Итак, я создал новую форму, скопировал написанный вами код и добавил PictureBox. Когда я пытаюсь его построить, я получаю 3 ошибки: -Error 3 'Image' is not a member of 'WindowsApplication7.CustomPictureBox'. /// -Warning 2 'Public Sub New()' in designer-generated type 'WindowsApplication7.CustomPictureBox' should call InitializeComponent method. /// - Error 1 Base class 'System.Windows.Forms.PictureBox' specified for class 'CustomPictureBox' cannot be different from the base class 'System.Windows.Forms.Form' of one of its other partial types. 17.08.2014
  • @ user3902533: Вы должны оставить код формы как есть. Создайте новый класс CustomPictureBox, он будет находиться в отдельном файле CustomPictureBox.vb. Создайте проект. Поместите этот новый элемент управления на форму. На этом этапе у формы не будет кода, только то, что есть в дизайнере, но вы все равно его не пишете. Запустите проект, вы должны увидеть результаты на экране. 17.08.2014
  • поздно там, где я сейчас, и я немного смущен (извините). С самого начала: я создал новый проект. Я добавил PictureBox в дизайн. Я создал новый класс под названием CustomPictureBox, в который я скопировал отправленный вами код. Тогда что ? Потому что когда я строю и отлаживаю, ничего не происходит 18.08.2014
  • @ user3902533: Вы создали новый проект. Пока ничего не добавляйте в конструктор. Создайте пользовательский класс CustomPictureBox и скопируйте в него приведенный выше код. Создайте проект. Вы должны увидеть новый элемент управления, появившийся на панели инструментов. Это не элемент управления картинкой, а другой. Перетащите это в форму. Вот и все. Запустите программу (F5) и наслаждайтесь! 18.08.2014
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..