Страница: 1 | 2 |
Вопрос: Можно ли считать часть картинки из файла? И как
Добавлено: 06.08.06 06:47
Автор вопроса: Morpheus | Web-сайт:
Вот такая вот трабла.
Хотел сделать прогу для КПК чтобы карту местности показывала; набросок работает нормально, но большие рисунки не берёт :(
упихть туда удалось гдето 300 кило. Может это правда из-за разрешения? типа я приравниваю размер ПикчерБокса к размеру рисунка - пишет ошибку. Но по любому надо оптимизировать как то
а я в .НЕТ да ещё и для КПК не ах мягко говоря...
Гугл мне много полезного надавал, но в основном просто по загрузке картинок и немного по сохранению.
Может кто знает как считать нужный прямоугольник по координатам из файла?
Заранее сенкс :)
Ответы
Всего ответов: 16
Номер ответа: 1
Автор ответа:
Morpheus
Вопросов: 224
Ответов: 3777
Web-сайт:
Профиль | | #1
Добавлено: 06.08.06 17:43
Вот сделал что-то на подобии BitBlt то есть решил разбить на кусочки и рисовать их, но ничо не могу понять: проект создан для КПК, компилируется и запускается на обоих компах без ошибок. но вот этот вот код:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
i = i + 5
'dst.CreateGraphics.Clear(dst.BackColor)
dst.CreateGraphics.DrawImage(src.Image, i, 1)
dst.CreateGraphics.DrawImage(src.Image, i + 10, 30)
End Sub
на КПК выдаёт error!
NotSupportedException
Application::Run+0xf
Form1::Main+0xa
Как же так? причё без разницы - проект для PocketPC или WindowsCE
Номер ответа: 2
Автор ответа:
EROS
Вопросов: 58
Ответов: 4255
Профиль | | #2
Добавлено: 06.08.06 21:31
попробуй сначала создать объект Graphics, а уже потом что то рисовать на нем.. (2-я строчками вместо одной)
и что такое dst у тебя?
Номер ответа: 3
Автор ответа:
EROS
Вопросов: 58
Ответов: 4255
Профиль | | #3
Добавлено: 06.08.06 21:34
считать часть файла это вряд ли.. Открывать по любому надо будет полностью.. можно потом из целой картинки через метод Clone получить определенный участок нужного размера..
Номер ответа: 4
Автор ответа:
Morpheus
Вопросов: 224
Ответов: 3777
Web-сайт:
Профиль | | #4
Добавлено: 06.08.06 21:42
dst & src - два Пикчербокса.
щас попробую.
(4 минуты спустя)
вот сделал, возможно криво так как не понял как разбивать на две строчки:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
i = i + 5
'dst.CreateGraphics.Clear(dst.BackColor)
dst.CreateGraphics()
dst.CreateGraphics.DrawImage(src.Image, i, 1)
End Sub
Всё равно не работает - та же ошибка
Кстати, в папке Релиз вместе с ЕХЕ лежат два файла: mscorlib.dll и mscorlib.xml, перемещение в папку с прогой не помогает, может их в виндовс надо как то запихнуть?
Номер ответа: 5
Автор ответа:
EROS
Вопросов: 58
Ответов: 4255
Профиль | | #5
Добавлено: 06.08.06 21:54
Нее, не так...
Dim Graph as Graphics=dst.CreateGraphics
Graph.DrawImage(src.Image, i, 1)
что то вроде этого..
Ты лучше скажи, что ты вообще хочешь сделать? подробнее опиши твою задачу.. потому как с GDI+ проблем вообще никаких нет.. он работает отлично.. скорее всего ты что то намудрил..
Номер ответа: 6
Автор ответа:
EROS
Вопросов: 58
Ответов: 4255
Профиль | | #6
Добавлено: 06.08.06 22:04
mscorlib.dll это вообще странно.. ты что то подключал к проекту?
Номер ответа: 7
Автор ответа:
Artyom
Разработчик
Вопросов: 130
Ответов: 6602
Профиль | | #7
Добавлено: 06.08.06 22:11
ни на какие мысли не наводит?
Номер ответа: 8
Автор ответа:
Morpheus
Вопросов: 224
Ответов: 3777
Web-сайт:
Профиль | | #8
Добавлено: 06.08.06 22:20
Не, не наводит
То что я выложил, это весь код, то есть почти весь что я написал сам. К проекту явного ничего не подключал - указал что это SmartDeviceApplication и всё. Всё что я хочу сделать на данный момент - вывести изображение или его часть в нужной части Пикчербокса (то есть найти работающий на КПК аналог BitBlt)
вообще даже строка dst.CreateGraphics() вызывает этот "NotVerySupportedException" код EROSа тоже работает отлично только на компе
Вообще странно что в студии разрешены многие средства на этапе разработки, которые не были включены в Виндовс мобайл и Компакт .НЕТ. Может Компакт . НЕТ обновить? хз
Номер ответа: 9
Автор ответа:
EROS
Вопросов: 58
Ответов: 4255
Профиль | | #9
Добавлено: 06.08.06 22:34
BitBlt я не силен в АПИ, но это, если не ошибаюсь, копирование изображения,так?
Если да, то GDI тебе абсолютно не нужен...
Тебе надо через System.Drawing.Bitmap.Clone получить часть(или все) готового изображения и присвоить свойству Image 2-го пикчербокса. Вот и все...
Номер ответа: 10
Автор ответа:
EROS
Вопросов: 58
Ответов: 4255
Профиль | | #10
Добавлено: 06.08.06 22:41
А NotSupportedException говорит о том, что какой то метод в данной версии CFW не поддерживается...
Номер ответа: 11
Автор ответа:
Morpheus
Вопросов: 224
Ответов: 3777
Web-сайт:
Профиль | | #11
Добавлено: 06.08.06 23:35
аа... а я думал это исключение не поддерживается
2 EROS, а как это юзать? после того как я узнал что после строки System.Drawing.Bitmap. ничего нет(?!?!?), залез в мсдн и нашёл http://msdn2.microsoft.com/en-us/library/ms141944.aspx,
но не могу понять - чё это за PixelFormat? Эххх, изменился басик да ещё как
Номер ответа: 12
Автор ответа:
Morpheus
Вопросов: 224
Ответов: 3777
Web-сайт:
Профиль | | #12
Добавлено: 06.08.06 23:53
( 'Clone' is not a member of System.Drawing.Bitmap')
Номер ответа: 13
Автор ответа:
EROS
Вопросов: 58
Ответов: 4255
Профиль | | #13
Добавлено: 07.08.06 11:49
Попробуй выполнить этот код..
Dim cloneRect As New Rectangle(0, 0, 50, 50)
dst.Image = myBitmap.Clone(cloneRect, myBitmap.PixelFormat)
Номер ответа: 14
Автор ответа:
EROS
Вопросов: 58
Ответов: 4255
Профиль | | #14
Добавлено: 07.08.06 11:55
блин.. сорри, не глянул.. метод Clone не поддерживается в CFW вообще...(((
Номер ответа: 15
Автор ответа:
EROS
Вопросов: 58
Ответов: 4255
Профиль | | #15
Добавлено: 07.08.06 12:42
засада с этими КПК.. (( половина методов не поддерживаются..
Попробуй такой вариант
Dim myBitmap As New Bitmap(100, 100)
'// Создаем объект Graphics
Dim Graph As Graphics = Graphics.FromImage(myBitmap)
'// Координаты и размер области для копирования
Dim srcRect As New Rectangle(0, 0, 100, 100)
'// Координаты и размер области куда вставляем
Dim dstRect As New Rectangle(0, 0, 100, 100)
'// Переносим участок на наш Bitmap
Graph.DrawImage(src.Image, dstRect, srcRect, GraphicsUnit.Pixel)
'// Отображаем
dst.Image = myBitmap
'// Убиваем ненужное
Graph.Dispose()