Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > Blitz3D > 2D-программирование

2D-программирование Вопросы, касающиеся двумерного программирования

Ответ
 
Опции темы
Старый 21.02.2008, 15:08   #1
AndruXa
Знающий
 
Регистрация: 10.09.2007
Сообщений: 262
Написано 6 полезных сообщений
(для 8 пользователей)
Масштаб 2д изображения

Как сделать так, чтобы изображение можно было уменьшить а потом увеличить без потери качества. Стандартные СкайлИмайдж сильно портят картинку
(Offline)
 
Ответить с цитированием
Старый 21.02.2008, 15:16   #2
H@NON
Дэвелопер
 
Регистрация: 17.01.2007
Сообщений: 1,552
Написано 351 полезных сообщений
(для 774 пользователей)
Ответ: Масштаб 2д изображения

использовать библиотеку Михаила FastImage, ибо она работает через спрайты. Можно конеш и самому написать систему проецирования спрайтов на 2д плоскость монитора, но легче и выгоднее заюзать куда гораздо продвинутую и совершенную систему.
Но если все же нужно делать имейджами, то сделай копию того изображения которое тебе нужно уменьшить, а оригинал оставь. После того как ты уменьшил эту копию проверяешь когда тебе нужно обратно увеличить это изображение, и когда событие равно тру, то берешь оригинал, а копию скрываешь с экрана или удаляешь из памяти.
А вот готовая функция :
; -------------------------------------------------------------------------------------------------------------------------------------
; This function scales an image an arbitrary amount on the X and Y axis, and returns a pointer to the new image.
; The original image is not modified.
;
; This function is 80x faster than the ScaleImage function that comes with Blitz! 
; -------------------------------------------------------------------------------------------------------------------------------------
Function ScaleImageFast(SrcImage, ScaleX#, ScaleY#)

    Local SrcWidth,  SrcHeight
    Local DestWidth, DestHeight
    Local ScratchImage, DestImage
    Local SrcBuffer, ScratchBuffer, DestBuffer
    Local X1, Y1, X2, Y2

    ; Get the width and height of the source image.     
        SrcWidth  = ImageWidth(SrcImage)
        SrcHeight = ImageHeight(SrcImage)

    ; Calculate the width and height of the dest image.
        DestWidth  = Floor(SrcWidth  * ScaleX#)
        DestHeight = Floor(SrcHeight * ScaleY#)

    ; If the image does not need to be scaled, just copy the image and exit the function.
        If (SrcWidth = DestWidth) And (SrcHeight = DestHeight) Then Return CopyImage(SrcImage)

    ; Create a scratch image that is as tall as the source image, and as wide as the destination image.
        ScratchImage = CreateImage(DestWidth, SrcHeight)
                
    ; Create the destination image.
        DestImage = CreateImage(DestWidth, DestHeight) 

    ; Get pointers to the image buffers.
        SrcBuffer     = ImageBuffer(SrcImage)
        ScratchBuffer = ImageBuffer(ScratchImage)
        DestBuffer    = ImageBuffer(DestImage)

    ; Duplicate columns from source image to scratch image.
        For X2 = 0 To DestWidth-1
            X1 = Floor(X2 / ScaleX#)
            CopyRect X1, 0, 1, SrcHeight, X2, 0, SrcBuffer, ScratchBuffer
        Next
            
    ; Duplicate rows from scratch image to destination image.
        For Y2 = 0 To DestHeight-1
            Y1 = Floor(Y2 / ScaleY#)
            CopyRect 0, Y1, DestWidth, 1, 0, Y2, ScratchBuffer, DestBuffer
        Next                
    
    ; Free the scratch image.
        FreeImage ScratchImage                    
                        
    ; Return the new image.
        Return DestImage
                    
End Function
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
AndruXa (24.02.2008)
Старый 21.02.2008, 21:14   #3
jimon
 
Сообщений: n/a
Ответ: Масштаб 2д изображения

AndruXa
а зачем ?
имхо проще хранить увеличеную картинку в оригинальном качестве и уменьшеную ...
 
Ответить с цитированием
Старый 21.02.2008, 23:37   #4
moka
.
 
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,863 пользователей)
Ответ: Масштаб 2д изображения

Самый лучший и производительный варриант это юзать биллбоарды с текстурами

FastImage как раз работает через 3D.
(Offline)
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо moka за это полезное сообщение:
AndruXa (24.02.2008), Randomize (27.01.2010)
Старый 24.02.2008, 12:20   #5
AndruXa
Знающий
 
Регистрация: 10.09.2007
Сообщений: 262
Написано 6 полезных сообщений
(для 8 пользователей)
Re: Масштаб 2д изображения

а зачем ?
имхо проще хранить увеличеную картинку в оригинальном качестве и уменьшеную ...
Дело в том, что я на экзамен пишу прогу - смесь пайнта и некоторых функций фотошопа, наверно представляете как в фотошопе роликом мыши меняется масштаб...ну я и сделал скайлимайджем, уменьшается-то она нормально, но вот когда снова увеличиваешь - появляется черный квадрат вместо изображения. Всем спасибо буду юзать ФастИмейдж
(Offline)
 
Ответить с цитированием
Старый 24.02.2008, 17:48   #6
tormoz
Гигант индустрии
 
Аватар для tormoz
 
Регистрация: 14.12.2005
Сообщений: 2,785
Написано 1,183 полезных сообщений
(для 4,437 пользователей)
Ответ: Re: Масштаб 2д изображения

Сообщение от AndruXa Посмотреть сообщение
Дело в том, что я на экзамен пишу прогу - смесь пайнта и некоторых функций фотошопа, наверно представляете как в фотошопе роликом мыши меняется масштаб...ну я и сделал скайлимайджем, уменьшается-то она нормально, но вот когда снова увеличиваешь - появляется черный квадрат вместо изображения. Всем спасибо буду юзать ФастИмейдж
1 Нужно хранить исходную картинку
2 выводить на экран нужно ее копию
3 копию делать методом CoryRectStrech (фаст имаже)
__________________
(Offline)
 
Ответить с цитированием
Старый 25.02.2008, 13:30   #7
moka
.
 
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,863 пользователей)
Ответ: Масштаб 2д изображения

CopyRectStrech - Это функция из FastExtends библиотеки, но не фастимаговская
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
tormoz (25.02.2008)
Старый 26.01.2010, 20:30   #8
Mustang_GT
AnyKey`щик
 
Регистрация: 21.01.2010
Сообщений: 17
Написано 0 полезных сообщений
(для 0 пользователей)
Ответ: Масштаб 2д изображения

Люди, а как сделать, чтобы изображение "подстраевалось" под монитор? Очень надо. Если, например, картинка 1028х768, а разрешение 800х600 или какое-нить ещё. Как сделать, чтоб картинка подстроилась под любое разрешение экрана
(Offline)
 
Ответить с цитированием
Старый 27.01.2010, 02:13   #9
moka
.
 
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,863 пользователей)
Ответ: Масштаб 2д изображения

Scale?
(Offline)
 
Ответить с цитированием
Старый 27.01.2010, 02:20   #10
St_AnGer
Элита
 
Аватар для St_AnGer
 
Регистрация: 21.01.2010
Адрес: Россия, Рязанская область, г.Михайлов
Сообщений: 2,067
Написано 1,185 полезных сообщений
(для 2,828 пользователей)
Ответ: Масштаб 2д изображения

Я делал очень через.опным способом, пока не подключил FastImage, поэтому советую пользоваться FastImage.
Ну а способ был такой:

widthimage#=ImageWidth(картинка)
Heightimage#=ImageHeight(картинка)
ScaleImage картинка,1+(GraphicsWidth()-widthimage)/widthimage,1+(GraphicsHeight()-heightimage)/heightimage
Но я картинку таким способом растягивал на экран бОльшего размера чем сама картинка... Причём это происходило довольно-таки не очень быстро. Но должно работать и если картинка больше разрешения экрана
__________________
Main PC:
Intel Core i5 4260U 1.44 GHz + LPDDR3 1x4096 1600 MHz + Intel HD Graphics 5000.

Asus Ёжик T101-MT:
Intel Atom N-570 1.66 Ghz + DDR2 2x1024 800 Mhz + Intel GMA 3150 128 Mb DDR2


Скачать Doom 2D: Remake v0.3.8a
(Offline)
 
Ответить с цитированием
Старый 27.01.2010, 06:46   #11
Hurrit
Мастер
 
Аватар для Hurrit
 
Регистрация: 27.01.2008
Адрес: Россия, СКФО, ЧР, Грозный
Сообщений: 1,144
Написано 578 полезных сообщений
(для 2,207 пользователей)
Ответ: Масштаб 2д изображения

Это и стандартными возможностями блица делается одной строкой
ResizeImage img,GraphicsWidth(),GraphicsHeight()
(Offline)
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо Hurrit за это полезное сообщение:
Sef (06.10.2010), St_AnGer (27.01.2010)
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Cистема Редактирования Графики GRAF AndruXa Проекты на Blitz3D 17 22.04.2010 13:45
Знание BlitzBasic или Purebasic может дать работу darkand Болтовня 35 30.09.2009 20:47
Лабиринт с шариком внутри ( проблемка) klopmaks Blitz3D 29 11.12.2008 04:36
Все статьи, уроки,дополнения, ошибки компl anton_obuhov Основной форум 3 14.09.2008 13:11
Оптимизация: Отбрасывание невидимых пол& Dstorton111 3D-программирование 20 27.04.2008 02:46


Часовой пояс GMT +4, время: 16:40.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com