www.map-info.ru :: Просмотр темы - Редактировать растр
                               РќР° главную страницу сайта

 
                                
ВходВход    РегистрацияРегистрация    ПрофильПрофиль    ПользователиПользователи    ГруппыГруппы    FAQFAQ    ПоискПоиск  
На страницу 1, 2  След.
 
   Список форумов www.map-info.ru | Форум - программирование в среде MapInfo Добавить ответ
Предыдущая тема :: Следующая тема  
Автор Сообщение
Vovik



Зарегистрирован: 04.05.2008
Сообщения: 57

СообщениеДобавлено: Ср Дек 03, 2008 4:26 am    Заголовок сообщения: Редактировать растр Добавить ответ со ссылкой на данный текст

Люди, кто нибудь знает способ как из MI редактировать растровую таблицу (собственно сам растр)? Можно, конечно, открыть растровую таблицу начертить, инструментами MI, то что надо и все это растеризовать используя меню Файл-Экспорт окна, но это долго и не совсем то что надо. Подскажите кто знает, как написать подходящуюю утилиту или программку с ипользованием интегрированной картографии на (на MB или VB) и т.п. для решения вышепоставленной задачи
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Alex_Y



Зарегистрирован: 28.11.2008
Сообщения: 122

СообщениеДобавлено: Ср Дек 03, 2008 7:35 am    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

Насколько я знаю в МИ этого сделать нельзя
а в чем проблема, грузи растр в графичечкий редактор (если в VB, то в тот же TImage) там меняй что хочешь, а потом в МИ обнови окно, он тебе сам подгрузит обновление
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Vovik



Зарегистрирован: 04.05.2008
Сообщения: 57

СообщениеДобавлено: Ср Дек 03, 2008 10:47 am    Заголовок сообщения: Re: Редактировать растр Добавить ответ со ссылкой на данный текст

Извиняюсь. Что такое TImage в VB?
Очень сильно хочется например при работе с картой в MI (в частности с пятисоткой), используя, скажем так инструмент "Ластик", подтереть что то на растре прямо в MI. Мечта!
Так вот как сделать этот самый "Ластик". Бьюсь но никак не могу.
Собственно это мне нужно не для этого "Ластика", а для того что по долгу службы я часто вношу изменения в растры масштаба 1/500 (дом снесли, дом построилии и т.п.) К примеру:
У меня есть "старый растр" планшет масштаба 1/500 зарегистрированный как растровая таблица в MI в проекции план-схема и приносят мне новый растр но не весь планшет а только его фрагмент и мне нужно перенести (наложить) этот фрагмент на "старый" Для этого я сканирую принесенный растр, в Easy Trace его обрабатываю, накладываю на "старый", объеденяю оба растра и только потом итоговый регистрирую под именем "старого"
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Alex_Y



Зарегистрирован: 28.11.2008
Сообщения: 122

СообщениеДобавлено: Чт Дек 04, 2008 11:00 am    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

TImage это компонент для работы с растровыми изображениями, это в делфи, но думаю в vb есть аналог

стразу на окне карты ... тут не так все просто, хотя и решаемо. проще тот вариант который я предложил

объясню подробней.
пишешь приложение (делфи, vb, другой язык высокого уровня) которое в отдельном окне открывает твой раст как картинку, в этом приложении делаешь инструменты какие надо, там ластик и прочее. при закрытии этого окна сохраняешь измененный растр. В МИ, при обновлении окна карты, обновится и растр. Т.к. ты его поменял (неважно где в своей дополнительной программе или в том же стандартном паинте) МИ загрузит новый вариант и отобразит его в окне. А вызывать это твое приложение можешь уже и из MB и через интегрированную картографию.

Чтобы понять о чем я, попробуй одновременно открыть В МИ растр и его же в любом графическом редакторе. В редакторе изменить растр (стереть что-то или нарисовать), сохранить его, и в МИ ладошкой сдвинуть карту. У тебя нарисуется растр с твоими последними изменениями. Главное не менять размер этого растра, иначе его регистрация в МИ полетит!
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Vovik



Зарегистрирован: 04.05.2008
Сообщения: 57

СообщениеДобавлено: Пт Дек 05, 2008 5:02 am    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

Дорогой друг я так и делаю сейчас, т.е во внешнем графическом редакторе (пусть даже своего изготовления) Редактировать растр не проблема.
Часто приходится накладывать растры, но беда в том что часто бывает накладываемый "новый" растр, как правило фрагмент, по качеству значительно хуже чем "старый", что соответственно портит карту. Как, правило, съемку делают всякие там ООО или ЧП где копировальное оборудование просто плохое и в результате качество этого фрагмента то же плохое.
К примеру надо нанести на пятисотку вновь построенный дом с сетями для этого
Если «новый» растр хороший:
1.1 Сканирую «новый» растр
1.2 Обрабатываю во внешнем графическом редакторе
1.3 Трансформирую «новый» растр в EaseTrace
1.4 Совмещаю «старый» и «новый» растр в EaseTrace
1.5 Сохраняю итоговый растр под именем «старого»
1.6 Регистрирую в MI

Если «новый» растр плохой:
2.1 Сканирую «новый» растр
2.2 Обрабатываю во внешнем графическом редакторе
2.3 Трансформирую «новый» растр в EaseTrace
2.4 Во внешнем графическом редакторе кое что стираю в «старом» растре
2.5 Регистрирую «новый» растр в MI и накладываю его по верх "старого" как новый слой
2.6 Инструментами MI вношу изменения (по сути обвожу) в косметическом слое
2.7 Убираю слой «нового» растра
2.8 Экспортирую окно в графический файл, т.е получаю «новый» фрагмент растра
2.9 Повторяю пункты 1.4, 1.5 и 1.6
Как видишь долго и муторно.

Хочу так:
1. Сканирую «новый» растр
3. Трансформирую «новый» растр в EaseTrace
4. Регистрирую «новый» растр в MI и накладываю его по верх "старого" как новый слой
5. Инструментами которые хочу сделать вношу изменения в «старый» растр (стираю черчу и т.п.) прямо в MI
6. Убираю слой «нового» растра
и готово
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Alex_Y



Зарегистрирован: 28.11.2008
Сообщения: 122

СообщениеДобавлено: Пт Дек 05, 2008 10:41 am    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

я тогда не совсем понимаю зачем тут вообще мапинфо если работа ведется только с растрами? проще это все тогда в кореле делать, там и наложить растры можно и прозрачным сделать и стереть и нарисовать. Мапинфо работает с растрами только как с подложкой и ориентирована на работу с векторными картами и геоинформацией.
Можно конечно из МИ взять изображение окна, потом средствами интегрированной картографии рассчитать где это место на самом растре и поместить на растр. Только это помоему, извините, все равно что аппендицит через ж.. удалять. Ни кого не хочу обидеть, но для такой задачи МИ не лучший вариант.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Vovik



Зарегистрирован: 04.05.2008
Сообщения: 57

СообщениеДобавлено: Пт Дек 05, 2008 11:31 am    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

Растры в MI у меня точно как подожка. Основная информация у меня векторная. Просто хочу сделать работу с MI максимально комфортной даже если это через ж... но пусть это делает машина, она железная и не понимает через ж.. это или по человечески. Важен конечный результат.
Если не затруднит может есть какие нибудь иходники (ведь ты писал "средствами интегрированной картографии рассчитать где это место на самом растре и поместить на растр")
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Alex_Y



Зарегистрирован: 28.11.2008
Сообщения: 122

СообщениеДобавлено: Вс Дек 07, 2008 8:53 am    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

Потратил целых два часа своего свободного времени на то чтобы реализовать интрумент "ластик". Сделал самым простым способом, без интегрированной картографии, только mapbasic и dll, написанная на делфи, увы, vb не знаю. Программа максимально упрощена и показывает только технологию работы. Если нужны скомпилированные файлы, могу выслать на мыло.
Работает только с первым попавшимся растром, а формате bmp, в проекции план-схема. Должна по идее и в других работать, но не проверял.

---------------- rubber.mb ----------------
include "mapbasic.def"
include "icons.def"

Declare Sub Main
Declare Sub EndHandler
Declare Sub EndProgram
Declare Sub RollbackCosmetic
Declare Sub DrawRubber
Declare Sub CancelChanges
Declare Sub SaveChanges

Declare Sub OpenRaster Lib "rubber.dll" (ByVal RFileName As String, ByVal MinX, ByVal MinY, ByVal MaxX, ByVal MaxY As Float)
Declare Sub CloseRaster Lib "rubber.dll"
Declare Sub SaveRaster Lib "rubber.dll" (ByVal RFileName As String)
Declare Sub DrawRect Lib "rubber.dll" (ByVal X1, ByVal Y1, ByVal X2, ByVal Y2 As Float, ByVal PenColor, ByVal BrushColor As Integer)

Dim RFileName As String ' Имя файла растра
Dim RBoundMinX, RBoundMinY As Float ' Географические размеры
Dim RboundMaxX, RBoundMaxY As Float ' растра

Define RubberSize 50 ' Размар ластика

Sub Main
Dim i As Integer

' Создаем панель инструментов
Create ButtonPad "Инструменты" As
ToolButton HelpMsg " Ластик \n Ластик "
Cursor MI_CURSOR_CROSSHAIR DrawMode DM_CUSTOM_POINT
Calling DrawRubber Icon MI_ICON_RECT
PushButton HelpMsg " Отменить исправления \n Отменить исправления "
Calling CancelChanges Icon MI_ICON_UNDO
PushButton HelpMsg " Сохранить исправления\ \n Сохранить исправления "
Calling SaveChanges Icon MI_ICON_SAVE_FILE
PushButton HelpMsg " Выход \n Выход "
Calling EndProgram Icon MI_ICON_LETTERS_E

' Ищем первый попавшийся растр
RFileName = ""
for i = 1 to NumTables()
if TableInfo(i, TAB_INFO_TYPE) = TAB_TYPE_IMAGE then
Set CoordSys Table TableInfo(i, TAB_INFO_NAME)
RFileName = TableInfo(i, TAB_INFO_TABFILE)
RFileName = Mid$(RFileName, 1, Len(RFileName)-3)+"bmp"
RBoundMinX = TableInfo(i, TAB_INFO_MINX)
RBoundMinY = TableInfo(i, TAB_INFO_MINY)
RBoundMaxX = TableInfo(i, TAB_INFO_MAXX)
RBoundMaxY = TableInfo(i, TAB_INFO_MAXY)
Exit For
end if
next

' Если не нашли, то выходим
if Len(RFileName) = 0 then
Note "Нет растра"
Call EndProgram
end if

' Открыть растр для редактирования
Call OpenRaster(RFileName, RBoundMinX, RBoundMinY, RBoundMaxX, RBoundMaxY)
End Sub

Sub EndHandler
' Восстановить косметический слой
Call RollbackCosmetic
' Закрыть раст
Call CloseRaster
End Sub

Sub EndProgram
End Program
End Sub

Sub RollbackCosmetic
' Восстановить косметический слой
if FrontWindow() > 0 then
Rollback Table WindowInfo(FrontWindow(), WIN_INFO_TABLE)
end if
End Sub

Sub DrawRubber
Dim R As Object
Dim X, Y As Float

' Получить координаты ластика
X = CommandInfo(CMD_INFO_X)
Y = CommandInfo(CMD_INFO_Y)

' Отрисовка ластика на растре в памяти
Call DrawRect(X-RubberSize, Y-RubberSize, X+RubberSize, Y+RubberSize, WHITE, WHITE)

' Создание Ластика
Create Rect Into Variable R
(X-RubberSize, Y-RubberSize)(X+RubberSize, Y+RubberSize)
Pen(1, 2, WHITE)
Brush(2, WHITE, WHITE)

' Вставка ластика в косметический слой
Insert Into WindowInfo(FrontWindow(), WIN_INFO_TABLE)
(obj) Values(R)
End Sub

Sub CancelChanges
' Восстановить косметический слой
Call RollbackCosmetic
' Закрыть раст
Call CloseRaster
' Открыть растр для редактирования
Call OpenRaster(RFileName, RBoundMinX, RBoundMinY, RBoundMaxX, RBoundMaxY)
End Sub

Sub SaveChanges
' Сохранить изменения в растре
Call SaveRaster(RFileName)
' Восстановить косметический слой
Call RollbackCosmetic
End Sub


---------------- rubber.dpr ----------------
library rubber;
uses Graphics;

var bmp : TBitmap; // Растр
RBoundMinX, RBoundMinY, // Географические размеры
RboundMaxX, RBoundMaxY : Real; // растра

procedure OpenRaster(const RFileName : PChar; const MinX, MinY, MaxX, MaxY : Real); stdCall;
begin
// Загружаем растр в память
bmp := TBitmap.Create;
bmp.LoadFromFile(RFileName);
// Получаем географическую область растра
RBoundMinX := MinX; RBoundMinY := MinY;
RboundMaxX := MaxX; RBoundMaxY := MaxY;
end;

procedure CloseRaster; stdCall;
begin
// Закрываем растр
if Assigned(bmp) then
begin
bmp.Free; bmp := nil;
end;
end;

procedure SaveRaster(const RFileName : PChar); stdCall;
begin
// Сохраняем изменения растра
if Assigned(bmp) then bmp.SaveToFile(RFileName);
end;

procedure DrawRect(X1, Y1, X2, Y2 : Real; const PenColor, BrushColor : Integer); stdCall;
var kX, kY : Real;
begin
// Убираем географическое смещение координат
X1 := X1-RBoundMinX; X2 := X2-RBoundMinX;
Y1 := Y1-RBoundMinY; Y2 := Y2-RBoundMinY;
// Рассчитываем коэффициенты перехода от географических координат растра к пиксельным
kX := (RBoundMaxX-RBoundMinX)/bmp.Width;
kY := (RBoundMaxY-RBoundMinY)/bmp.Height;
// Рисуем прямоугольник на растре
bmp.Canvas.Pen.Color := PenColor;
bmp.Canvas.Brush.Color := BrushColor;
bmp.Canvas.Rectangle(Round(X1/kX), bmp.Height-Round(Y1/kY),
Round(X2/kX), bmp.Height-Round(Y2/kY));
end;

exports
OpenRaster, CloseRaster, SaveRaster, DrawRect;

begin
end.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Vovik



Зарегистрирован: 04.05.2008
Сообщения: 57

СообщениеДобавлено: Вт Дек 09, 2008 5:52 am    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

Спасибо дорогой друг!
Опробовал все прекрасно. Правда Delphi я не знаю но придется поучиться малость.
Правда подложка у меня из Tif растров.
А не льзя ли так для этих растров ?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Alex_Y



Зарегистрирован: 28.11.2008
Сообщения: 122

СообщениеДобавлено: Вт Дек 09, 2008 6:39 am    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

надо искать компонент для делфи, для работы с тифами
есть неплохой компонент, GraphicEx называется, вроде он работает с тифами

пиши в том что знаешь, главное чтобы оно длл умело создавать :)
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Vovik



Зарегистрирован: 04.05.2008
Сообщения: 57

СообщениеДобавлено: Ср Дек 10, 2008 9:07 am    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

Дорогой друг!
Скачал GraphicEx а приладить не могу. Помоги пожалуйста!
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Alex_Y



Зарегистрирован: 28.11.2008
Сообщения: 122

СообщениеДобавлено: Ср Дек 10, 2008 10:44 am    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

сам не пользовался

добавляешь GraphicEx в секцию uses

в коде что-то типа

var bmp : TBitmap;
pic : TPicture;
begin
pic := TPicture.Create;
bmp := TBitmap.Create;
try
pic.LoadFromFile(Name);
if not (pic.Graphic is TBitmap) then
begin
with bmp do
begin
PixelFormat := pf24Bit;
Width := pic.Width; Height := pic.Height;
Canvas.Draw(0, 0, pic.Graphic);
end;
pic.Bitmap.Assign(bmp);

// тут работаем так как я писал, с полученным битмапом

// Сохраняем в нужном формате, не помню как
// скорее всего pic.SaveToFile(Name);
end;
finally
bmp.Free; pic.Free;
end;
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Alisa_67



Зарегистрирован: 10.05.2012
Сообщения: 5

СообщениеДобавлено: Чт Май 10, 2012 4:43 pm    Заголовок сообщения: HELP! Добавить ответ со ссылкой на данный текст

Пожалуйста помогите, мне очень нужно реализовать посредством mapbasic подстройку растрового изображения, туплю в стправочнике никак не могу найти подходящий оператор....оч нужно для диплома...времени совсем чуть осталось Shocked
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Нестеров Валерий



Зарегистрирован: 21.03.2006
Сообщения: 492

СообщениеДобавлено: Чт Май 10, 2012 4:58 pm    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

а что значит подстроить?
_________________
Жизнь прекрасна!i
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Андрей Могильный



Зарегистрирован: 21.03.2006
Сообщения: 864

СообщениеДобавлено: Чт Май 10, 2012 6:25 pm    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

Видимо привязать?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
Показать сообщения:   
   Список форумов www.map-info.ru | Форум - программирование в среде MapInfo Добавить ответ
На страницу 1, 2  След.
Страница 1 из 2

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


Top.Mail.Ru