![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
![]() Здравствуйте. Ситуация такая: обьявляю глобальную переменную TBitmap, как полагается создаю ее через Create, потом LoadFromFile из bmp-файла, потом на ее канве рисую разные вещи, потом вывожу ее на канву формы с помощью метода Draw.
Проблема вот в чем: если программе предлагается bmp-файл, созданный в "Пайнте" то все работает без всяких проблем. Если же файл создан в фотошопе (расширение то же самое - bmp, 24 бита, windows) то программа выдает ошибку "Stream read error" при попытке загрузить изображение из файла. Обьясните мне пожалуйста, почему так выходит? может надо что-то в код дописать для лучшей читаемости bmp или в фотошопе какую опцию сохранения включить? |
#2
|
|||
|
|||
![]() (предыдущее сообщение игнорируем...)
Если я напишу: var image:TBitmap; ... image:= TBitmap.Create; Image.LoadFromFile('moon.bmp'); ... То битмап где окажется, в озу(оперативной памяти) или в видео памяти? |
#3
|
|||
|
|||
![]() 1. В ОЗУ, кстественно.
2. По предыдущему вопросу. BMP - это общий формат (контейнер). Там может быть несколько внутренних форматов, какие-то из которых нативно могут и не поддержтваться. Напримет, маковский битмап. |
#4
|
||||
|
||||
![]() По поводу первого поста. Тоже с этим сталкивался. Взял отключил гдето флаг "сглаживание" (не при сохранении, вроде бы) и все заработало. А вообще я просто беру и ACDSee перевожу из BMP в BMP просто и все норм читается.
|
#5
|
|||
|
|||
![]() А как узнать цвет пикселя, допустим в точке (5,1) ?
|
#6
|
|||
|
|||
![]() Если считать один пиксел, то так: bmp.Canvas.Pixels[X,Y].
Если надо считывать всю картинку (для реализации граф. фильтра, например), то через ScanLine |
#7
|
|||
|
|||
![]() 1. Допустим, у нас есть значение векторов Z,X,Y, как наложить НА НИХ текстуру?(в OpenGL)
2. Как масштабировать битмап?(в сторону уменьшения) P.S. Извеняюсь за 2-ой пост. Нажал вместо кнопки "Править" kнопку "цитата". |
#8
|
|||
|
|||
![]() C OpenGL не работал, а по поводу уменьшения все просто.
Есть у канвы функция StretchDraw, которая отрисовывает битмап с масштабированием. Тебе надо только расчитать облась, на которую надо отмасштабировать картинку. Можно еще "накопать" функций, которые умеют масштабировать со сглаживанием, но тут надо понимать, что они будут работать медленнее. Т.е. если тебе нужна скорость - обращаешься к API, если качество - к другим процедурам. Кстати, в OpenGL, наверное, есть свои методы для масштабирования текстур. |
#9
|
|||
|
|||
![]() "StretchDraw, которая отрисовывает битмап с масштабированием"
Не надо отрисовывааааааааэээээээээээээть!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!! просто уменьшить (или увеличить) и сохранить в память. Последний раз редактировалось DungeonLords, 24.11.2008 в 21:33. |
#10
|
|||
|
|||
![]() Не надо столько кричать
![]() Отрисовать можно и на канве друго TBitmap ![]() Просто создаешь еще один битмап, ставишь ему размеры и на его канве с помощью StretchDraw отрисовываешь свой! На экран при этом, естественно, ничего не выводится ![]() |
#11
|
|||
|
|||
![]() Как перейти на другую сторону Каспийского озера, не намочившись - воспользоваться обходным путём!(ирония, если обходить Каспийское озеро по суше, затратишь куда больше времени! Так и тут!)
|
#12
|
|||
|
|||
![]() Иронию не понял. Т.е. сама тема понятна, но ее отношение к ситуации - нет. Есть просто термин - "отрисовка". Он относится не только к выводу на экран, а к любой отрисовке на канве (на самом деле, на DC), а уж экранная это канва или нет - дело десятое. Преобразование картинок - в своем большинстве устроенно именно так - мы читаем из оригинала данные и, обработав их, записываем в другую картинку. Потом первую просто "убиваем" и дальше работаем со второй.
|
#13
|
|||
|
|||
![]() Есть процедура Pixels[x,y];.
И она выдаёт цвет пикселя в числовом значении. Но порой это значение - 0, а порой - 52342000(это наблюдается и в 16 битных, и в 32 битных битмапах). Можно ли как-нибудь уменьшить чёткость восприятия процедуры? |
#14
|
|||
|
|||
![]() Цитата:
Попробуй так: var Col : TColor; X, Y : Integer; begin X:=1; Y:=5; Col := Image1.Canvas.Pixels[X, Y]; end; |
#15
|
|||
|
|||
![]() procedure TForm1.pastebutClick(Sender: TObject);
var Bitmap: TBitmap; HasFormat: boolean; begin if Clipboard.HasFormat(CF_BITMAP) then Image1.Picture.Bitmap.Assign(Clipboard) ; end; ругается на это((( 'TBitmap' does not contain a member named 'HasFormat' и где взять такую штуковину, ну, в общем прямоугольник выделения? клипбоард в юзес добавил ищю ищю, найти не могу( зы. я делаю пеинт. вот там надо копировать\вырезать вставить. вроде процедурки ввел эти, а когда жму на кнопку то ошибка.((( хелп! |