2016-07-24 8 views
-2

Я знаю очень мало о программировании на C#, и я искал эту тему здесь и в Google. Когда я ищу о том, как исказить изображение, большинство сообщений ссылаются на MagickImage или другие библиотеки, и на самом деле я пробовал примеры здесь, но для меня ничего не работает. Я пытался с MagickImage, я не мог заставить его работать, и я задаю вопрос об этом. Никто не отвечает, поэтому я делаю это по-другому.C# искажение изображения

Что я хочу сделать, это просто исказить изображение так, как оно есть в 3D-пространстве, есть ли способ сделать это на C# вне библиотеки? или с библиотекой?

я бы очень признателен за любую помощь по этому вопросу

Bitmap processedBitmap = new Bitmap(@"c:\Users\Nicci\Desktop\santa\libro.jpg"); 
     int width = processedBitmap.Width; 
     int height = processedBitmap.Height; 
     for (int y = 0; y < height; y++) 
     { 
      for (int x = 0; x < width; x++) 
      { 
       Color oldPixel = processedBitmap.GetPixel(x, y); 
       Color newPixel = oldPixel; 
       processedBitmap.SetPixel(x, y, newPixel); 
      } 
     } 
    } 

С уважением!

+0

Итак, вы хотите делать что-то вроде произвольного 3D-вращения и т. Д. – harold

+0

Возможно, что картина стоит тысячи слов. Возможно, вы ищете [Перспективная проекция] (https://www.cse.unr.edu/~bebis/CS791E/Notes/PerspectiveProjection.pdf) (формат PDF). –

+0

Спасибо, ребята. Да, Гарольд. Это именно то, что я хочу сделать. Это очень плохо, без какой-либо библиотеки? Думаю, я не могу заставить Магический образ работать! – fauvent

ответ

2

Это не особенно трудно обойтись без библиотек, хотя она занимает немного кода (который я не все тип прямо сейчас), вы просто должны

  • петлю над каждым пикселем назначения image (да не источник, вы увидите, почему)
  • обратный преобразовать координату назначения в исходную координату путем предварительного умножения на матрицу обратного преобразования (звучит фантастически, но легко)
  • образец исходного изображения в найденной таким образом координате вы можете использовать билинейную фильтрацию здесь для получения лучших результатов (это часть, почему это делается таким образом aroun d, также чтобы избежать отверстий)

Чтобы избежать смехотворной медленности (из-за GetPixel и SetPixel), заблокируйте растровые изображения и используйте код unsafe.

+0

Harold, Большое спасибо за ваш ответ. Я ценю время, которое вы предпринимаете, чтобы помочь мне. Как я уже говорил, я очень мало знаю о C#. Поэтому я постараюсь сегодня написать код на основе вашего совета. Тогда я вернусь сюда и вставьте его на случай, если он не сработает, поэтому вы можете мне помочь ... Надеюсь, это не проблема – fauvent

+0

Хорошо, Гарольд, я должен признать, что я полностью потерян. Вы, ребята, знаете, с чего начать? Какой-то учебник или образец кода? :( – fauvent

+0

@fauvent начать с копирования пикселя изображения по пикселю, затем поместить в матричное умножение, чтобы вы копировали пиксели из преобразованного местоположения, будьте осторожны, чтобы не выйти за пределы изображения здесь, а затем добавить интерполяцию или это будет выглядеть плохо – harold

 Смежные вопросы

  • Нет связанных вопросов^_^