Страница: 1 | 2 | 3 |
Вопрос: Для знатоков. Есть проблема с RichTextBox1
Добавлено: 17.01.07 00:03
Автор вопроса: Георгич
Есть проблема с RichTextBox1, она заключается в следующем. Загружаем текстовый файл с картинками с расширением .RTF ,он выводиться в RichTextBox1 всё нормально ,есть текст, есть картинки. Теперь мне надо взять эту картинку или картинки для последующей редакции , ну например узнать цвет каждого пикселя . Т .е перевести картинку в класс Bitmap . Должно быть всё просто, копируй, вставляй в пустой графический файл и дальше работай с файлом ,вот здесь и стоп. Да, можно копировать картинку из RichTextBox1, и вставлять в другой RichTextBox2 или в сам RichTextBox1 , так же вставляется в Word, но не более .
Вот здесь и есть вопросы, в каком формате картинка в текстовом документеRTF и , что с буфером для RichTextBox . Я решил проблему копирования картинки из RichTextBox,код ниже , но , что то мне подсказывает, что надо просто прописать для Clipboard
Нужные форматы. Что то подобное я встречал но совершенно не помню.
Код полностью рабочий
Private Sub КопироватьКартинку_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
RichTextBox1.Copy() 'Копируем выделенный объект (картинку)
'Делаем ссылку в проекте на библиотеку COM элемента Word Objecct Library
'Запускаем редактор Word в фоновом режиме
Dim РедакторВорд As New Microsoft.Office.Interop.Word.Application
РедакторВорд.DisplayAlerts = Microsoft.Office.Interop.Word.WdAlertLevel.wdAlertsNone
' Создаём новый документ ( пользователь его не видит)
Dim ДокументВорд As Microsoft.Office.Interop.Word.Document = РедакторВорд.Documents.Add()
Dim Поле As Microsoft.Office.Interop.Word.Range = ДокументВорд.Paragraphs.Add().Range
' ДокументВорд.Visible = True ' Так можно увидеть документ
' Вставляем из буфера картинку в документ
Поле.Paste()
'Копируем картинку
Поле.Copy()
'Сохраняем документ, чтобы не выскакивало диалоговое окно о сохранении
ДокументВорд.SaveAs("C:\test.doc")
'Закрываем документ
ДокументВорд.Close()
'Удаляем текстовый файл Word за ненадобностью
System.IO.File.Delete("C:\test.doc")
'Создаём объект Картинка класса Image, присваиваем данные из буфера
Dim Картинка As Image = CType(Clipboard.GetDataObject.GetData(DataFormats.Bitmap), Bitmap)
' показываем картинку в PictureBox1
PictureBox1.Image = Картинка
'Сохраняем в файле
Картинка.Save("C:\test.JPG")
End Sub
Ответы
Всего ответов: 32
Номер ответа: 1
Автор ответа:
EROS
Вопросов: 58
Ответов: 4255
Профиль | | #1
Добавлено: 17.01.07 09:28
Что то я не уловил в твоем коде смысла этого танца с бубнами вокруг документа Word/// И вообще не уловил сути проблемы.. Если я тебя правильно понял, то твой код работает, все копируется, все вставляется.. Что ты, конкретно, пытаешься сделать?
Номер ответа: 2
Автор ответа:
Георгич
Вопросов: 16
Ответов: 52
Профиль | | #2
Добавлено: 17.01.07 11:05
Суть дела в шифровании. Когда шифруешь текстовый документ с картинками текст шифруется, здесь проблем нет, а вот картинки пропадают Задача в моём приложении зашифровать текст, зашифровать картинки при дешифровке все вернуть на прежнее место . Я уже у себя прописал код который мне находи картинки в тексте , код основан на нахождении не текстового формата и копировании этого элемента(картинки) Таким образом я программно выбираю все картинки из текста Вот тут с копированием из RichTextBox и происходит ерунда, работает код который я прописал выше, а вот такой код не работает
Private Sub КопироватьКартинку_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
RichTextBox1.Copy() 'Копируем выделенный объект (картинку)
 im Картинка As Image = CType(Clipboard.GetDataObject.GetData(DataFormats.Bitmap), Bitmap)
PictureBox1.Image = Картинка
End Sub
Номер ответа: 3
Автор ответа:
Георгич
Вопросов: 16
Ответов: 52
Профиль | | #3
Добавлено: 17.01.07 11:29
Да, не дописал, мне самому не нравиться этот крендель с Word-ом весь смысл которого заключается в том , что я в Word вставляю картинку а потом ее копирую, но буфер воспринимает данный формат из Word-а , а из RichTextBox1 нет , вот я и спрашиваю нет ли альтернативных решений или какие форматы надо прописать для Clipboard
Номер ответа: 4
Автор ответа:
avdey
ICQ: 219571279
Вопросов: 34
Ответов: 486
Профиль | | #4
Добавлено: 17.01.07 11:40
А нельзя зашифровать уже сохраненный файл с картинками и текстом...
Номер ответа: 5
Автор ответа:
EROS
Вопросов: 58
Ответов: 4255
Профиль | | #5
Добавлено: 17.01.07 12:37
В таком случае тебе надо для начала выяснить в каком виде попадает картинка в буфер из RichTextBox, а уже потом исходя из формата хранения в буфере и будешь думать как привести ТО, что там храниться к соответствующему виду Bitmap...
И еще... вариант предложенный avdey, тоже не лишен смысла. Может стоит сохранить все содержимое RichTextBox в MemoryStream, получить оттуда массив байт, зашифровать его и уже после этого скинуть на HDD? Ты все же подумай в эту сторону...
Номер ответа: 6
Автор ответа:
Георгич
Вопросов: 16
Ответов: 52
Профиль | | #6
Добавлено: 17.01.07 12:49
Так я и говорю , что при шифровании из сохранённого файла , Когда создаешь криптографический поток (CriptoStream) , то картинка не воспринимается как текстовый формат и попросту пропускается, и при дешифровки соответственно текст дешифруется без картинок.
Номер ответа: 7
Автор ответа:
Георгич
Вопросов: 16
Ответов: 52
Профиль | | #7
Добавлено: 17.01.07 13:08
Я побывал через MemoryStream правда, мог что то-то не додумать , я создавал поток из памяти и для проверки выводил его в TextBox часть байтов выводилась нормально ,наверно текстовая, а потом комп. просто зависал. Сей час, проработаю это направление с MemoryStream по лучше, посмотрим. Если к Вам придут ещё идеи ,то дайте знать
Номер ответа: 8
Автор ответа:
avdey
ICQ: 219571279
Вопросов: 34
Ответов: 486
Профиль | | #8
Добавлено: 17.01.07 17:33
Причем тут текстовый формат??? В массиве байт нет различия между текстом или картинкой... ИМХО
Номер ответа: 9
Автор ответа:
EROS
Вопросов: 58
Ответов: 4255
Профиль | | #9
Добавлено: 17.01.07 21:17
Я сейчас специально проверил... по ходу ты там вставляешь картинку не верно.. вот так работает без проблем..
Вставляем
Clipboard.SetImage(PictureBox1.Image)
RichTextBox1.Paste(_format)
Забираем
Clipboard.Clear()
RichTextBox1.Copy()
PictureBox2.Image = Clipboard.GetImage
Номер ответа: 10
Автор ответа:
Георгич
Вопросов: 16
Ответов: 52
Профиль | | #10
Добавлено: 19.01.07 08:50
А ты в каком Бейсике пишешь. У меня в VB.Net 2003 для Clipboard , таких методов как SetImage и Clear нет
Номер ответа: 11
Автор ответа:
EROS
Вопросов: 58
Ответов: 4255
Профиль | | #11
Добавлено: 19.01.07 17:26
А я уж год, как на VS 2005 перешел...
Номер ответа: 12
Автор ответа:
EROS
Вопросов: 58
Ответов: 4255
Профиль | | #12
Добавлено: 19.01.07 17:29
Но в любом случае, я так думаю, правильнее было бы шифровать через массив байт.. от всех бы геморроев с картинками избавился бы...
Номер ответа: 13
Автор ответа:
Георгич
Вопросов: 16
Ответов: 52
Профиль | | #13
Добавлено: 23.01.07 09:56
Я послушал Ваш совет, и начал шифровать через поток байт. Результат идеальный. Правда столкнулся с трудностью преобразования Byte в Char и обратно, но разобрался. К стати шифровал не через массивы байт. а через файловые потоки. Производительность отличная. Всем спасибо за помощь.
Номер ответа: 14
Автор ответа:
Artyom
Разработчик
Вопросов: 130
Ответов: 6602
Профиль | | #14
Добавлено: 23.01.07 10:00
покажи код
Номер ответа: 15
Автор ответа:
EROS
Вопросов: 58
Ответов: 4255
Профиль | | #15
Добавлено: 23.01.07 11:19
А зачем тебе Char понадобился??? Там и без него можно обойтись...