Модераторы: diadiavova, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Слияние двух изображений 
V
    Опции темы
jennya
Дата 9.11.2009, 20:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 7.11.2009

Репутация: нет
Всего: нет



Помогите пожайлуста кто-нибудь, целый месяц уже бьюсь не могу разобраться программой на Vusial Basic 2005 для слияния двух изображений. У меня при компеляции появляется ошибка: Image is not a member of MergedImage/ Подскажите пожалуйста как исправить данную ошибку, программа приведена ниже:
Код

Public Class Form1
    Private SourceImages(1) As Bitmap
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim counter As Integer
        Dim locateFile As New OpenFileDialog
        Me.Show()
        locateFile.Filter = "JPG files (*.jpg)|*.jpg"
        For counter = 0 To 1
            If (locateFile.ShowDialog() <> Windows.Forms.DialogResult.OK) Then
                Me.Close()
                Return
            End If
            SourceImages(counter) = New Bitmap(locateFile.FileName)
        Next counter
        DoMergeImages()
    End Sub

    Private Sub Form1_FormClosed(ByVal sender As System.Object, ByVal e As System.Windows.Forms.FormClosedEventArgs) Handles MyBase.FormClosed
        End
    End Sub
    Private Sub DoMergeImages()
        Dim workBitmap As Bitmap
        Dim across As Integer
        Dim down As Integer
        Dim firstColor As Color
        Dim secondColor As Color
        Dim mixedColor As Color
        Dim redPart As Integer
        Dim greenPart As Integer
        Dim bluePart As Integer
        Dim canvas As Graphics
        workBitmap = SourceImages(0)
        canvas = Graphics.FromImage(workBitmap)
        For down = 0 To SourceImages(0).Height - 1
            For across = 0 To SourceImages(0).Width - 1
                Try
                    firstColor = SourceImages(0).GetPixel(across, down)
                    secondColor = SourceImages(1).GetPixel(across, down)
                Catch
                    Continue For
                End Try
                redPart = (CInt(firstColor.R) + secondColor.R) \ 2
                greenPart = (CInt(firstColor.G) + secondColor.G) \ 2
                bluePart = (CInt(firstColor.B) + secondColor.B) \ 2
                mixedColor = Color.FromArgb(redPart, greenPart, bluePart)
                workBitmap.SetPixel(across, down, mixedColor)
            Next across
            MergedImage.Image = workBitmap
            Application.DoEvents()
        Next down
        canvas.Dispose()
    End Sub
End Class



Это сообщение отредактировал(а) diadiavova - 9.11.2009, 23:19
PM MAIL   Вверх
Pilger
Дата 9.11.2009, 21:31 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 257
Регистрация: 10.5.2008
Где: Германия

Репутация: нет
Всего: нет



Ты однако вопрос по адресу задал.
1. Создай тему с вопросом
2. Пользуйся меткой кода


--------------------
Ein Leben nach der Schleife existiert, nur wenn die Schleife terminiert.
PM MAIL ICQ   Вверх
diadiavova
Дата 9.11.2009, 23:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 8
Всего: 142



Pilger, thx smile 
jennya, сообщение означает
Image не является членом MergedImage
Что-то добавить к этому трудно, поскольку из кода не видно какого типа у тебя MergedImage и где эта переменная объявлена(по крайней мере я не нашёл). На человеческом языке это значит, что у того типа, к которому принадлежит эта переменная(если это переменная) нент такого члена как Image, а ты пытаешься его вызвать.


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
jennya
Дата 10.11.2009, 18:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 7.11.2009

Репутация: нет
Всего: нет



АКаким типом переменой можно объявить MergedImage ? smile 
PM MAIL   Вверх
diadiavova
Дата 10.11.2009, 20:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 8
Всего: 142



Цитата(jennya @  10.11.2009,  18:48 Найти цитируемый пост)
АКаким типом переменой можно объявить MergedImage ? 

Ты вообще не в ту сторону копаешь. Во-первых что это вообще за объект? Во вторых твою задачу проще будет решить если ты создашь для её решения отдельную функцию. Примерно так
Код

Function MergeBitmaps(ByVal bm1 As Bitmap, ByVal bm2 As Bitmap) As Bitmap
    If bm1.Size <> bm2.Size Then
        Throw New Exception("Несовпадение размеров изображений")
    End If
    MergeBitmaps = New Bitmap(bm1.Width, bm1.Height)
    For r = 0 To bm1.Height - 1
        For c = 0 To bm1.Width - 1
            Dim newColor = MergeColors(bm1.GetPixel(c, r), bm2.GetPixel(c, r))
            MergeBitmaps.SetPixel( c, r,  newColor)
        Next
    Next
End Function

Function MergeColors(ByVal c1 As Color, ByVal c2 As Color) As Color

End Function

А в функции MergeColors пропиши код слияния цветов. Таким образом первая функция будет принимать две картинки, а возвращать результат слияния(если они одного размера).


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
jennya
Дата 10.11.2009, 21:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 7.11.2009

Репутация: нет
Всего: нет



Спасибо! А какой именно код?
PM MAIL   Вверх
diadiavova
Дата 10.11.2009, 21:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 8
Всего: 142



Цитата(jennya @  10.11.2009,  21:28 Найти цитируемый пост)
Спасибо! А какой именно код? 

В смысле? Если ты о коде слияния цветов, то это твоя задача. Я не знаю, что ты под слиянием понимаешь. Если судить по первому примеру, то вычисляй среднюю величину для каждого компонента цвета.
Код

Function MergeColors(ByVal c1 As Color, ByVal c2 As Color) As Color
    Dim aver = Function(x, y) CInt((x + y) / 2 )
    With MergeColors
        .R = aver(c1.R, c2.R )
        .G = aver(c1.G, c2.G )
        .B = aver(c1.B, c2.B ) 
   End With
End Function
Вот как-то так


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
jennya
Дата 12.11.2009, 01:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 7.11.2009

Репутация: нет
Всего: нет



Спасибо громадное, сейчас попробую.
PM MAIL   Вверх
jennya
Дата 13.11.2009, 17:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 7.11.2009

Репутация: нет
Всего: нет



Спасибо за ценный совет. Все оказалось проще. Нужно добавить на форму элемент PictureBox и назвать его MergedImage. Порграмма корректно работает если загружать картинки одинаковых размеров. Но возник другой вопрос как изменить програмный код, чтобы можно было добавлять неограниченное количество рисунков. Подскажите пожайлуста кто-нибудь.
PM MAIL   Вверх
diadiavova
Дата 13.11.2009, 17:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 8
Всего: 142



Цитата(jennya @  13.11.2009,  17:48 Найти цитируемый пост)
как изменить програмный код, чтобы можно было добавлять неограниченное количество рисунков. 
Куда добавлять? Опять мысли читать надо? Сформулируй свою задачу так, чтобы тебя можно было понять. По первому вопросу я только сейчас понял, что ты откуда-то скопипастил код, не прочитав инструкцию к нему. Опиши конкретно, что должна делать твоя программа.


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
jennya
Дата 13.11.2009, 18:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 7.11.2009

Репутация: нет
Всего: нет



Я не правильно задал вопрос как написать программу для вывода картинок в слайд-шоу?
PM MAIL   Вверх
diadiavova
Дата 13.11.2009, 18:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 8
Всего: 142



Цитата(jennya @  13.11.2009,  18:10 Найти цитируемый пост)
Я не правильно задал вопрос как написать программу для вывода картинок в слайд-шоу? 

Ну например можно картинки забить в массив, а в пикчербоксе для отображения следующей картинки просто присваивай его свойству Image нужное значение.


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
jennya
Дата 13.11.2009, 22:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 7.11.2009

Репутация: нет
Всего: нет



Нужно было написать программу, в которую можно помести одно изображение с меньшей интенсивностью, поверх другого с большей интнесивностью, чтобы создать эффект приведения. Что касается вывода картинок в виде слайд -шоу , то данный код для этого не подходит.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума VB .NET
diadiavova
  • Прежде чем задать вопрос, воспользуйтесь поиском: возможно Ваш вопрос уже обсуждался и на него был получен ответ.
  • Если такой же вопрос не найден, не стоит задавать свой вопрос в любую тему, создайте новую.
  • Заголовок темы должен отображать ее суть.
  • Содержание поста должно описывать проблему понятно, но в то же время, по возможности, лаконично. Сначала следует описать суть вопроса, потом можно привести пример кода, не вынуждайте других участников угадывать в чем Ваша проблема - телепатов здесь нет.
  • Будьте взаимно вежливы и дружелюбны.
  • При оформлении сообщений используйте форматирование, примеры кода заключайте в теги [CODE=vbnet][/CODE].
  • Также ознакомьтесь с общими правилами, действующими на всем форуме.
  • Если вопрос решен, не забывайте помечать тему решенной(вверху темы есть ссылка). Кроме того, если Вы хотите отблагодарить участников, оказавших помощь в решении, можно повысить им репутацию, в случае, если у Вас менее 100 сообщений в форуме и функция изменения репутации Вам недоступна, можете написать сюда.
  • Общие вопросы по программированию на платформе .NET обсуждаются здесь.
  • Литература по VB .NET обсуждается здесь.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, diadiavova.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | VB .NET | Следующая тема »


 




[ Время генерации скрипта: 0.0531 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.