Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.04.2012, 02:54   #1
FoggySpurs
Пользователь
 
Регистрация: 14.04.2012
Сообщений: 41
По умолчанию Как открыть BMP попиксельно в Делфи 7?

Помогите пожалуйста.Необходимо в Делфи открыть bmp файл попиксельно( не используя ScanLine) и отобразить его в PaintBox. Затем присвоить красной сотовляющей пикселя 0 и вывести новое изображение на PaintBox2.
Заранее Спасибо!
FoggySpurs вне форума Ответить с цитированием
Старый 15.04.2012, 03:40   #2
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,849
По умолчанию

Код:
var BitMap: TBitMap;
begin
  BitMap := TBitMap.Create;
  BitMap.LoadFromFile ('bla-bla-bla.bmp');
  PaintBox1.Canvas.Draw (0, 0, BitMap);
  BitMap.Free;
end;
Или надо вручную открыть файл и произвести чтение? Если так, то изучите структуру BMP-файла: http://c-site.h1.ru/infa/bmp_struct.htm , http://ru.wikipedia.org/wiki/BMP
Arigato вне форума Ответить с цитированием
Старый 15.04.2012, 03:48   #3
FoggySpurs
Пользователь
 
Регистрация: 14.04.2012
Сообщений: 41
По умолчанию

В том то и дело ,что вручную...PaintBox1.Canvas.Draw (0, 0, BitMap);-не катит(((...Не могу составить цикл ,выводящий попиксельно картинку на экран. Говорят,что при помощи Bitblt это можно сделать. Такое возможно?
FoggySpurs вне форума Ответить с цитированием
Старый 15.04.2012, 03:51   #4
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,849
По умолчанию

Как-то так:
Код:
// тут читаем из файла ширину и высоту картинки, а также разрядность
for y := height - 1 downto 0 do
  for x := 0 to width - 1 do
  begin
    // тут читаем цвет очередного пикселя из файла
    PaintBox1.Canvas.Pixels[x,y] := c; // c - считанный выше цвет rgb
  end;
Только все это будет весьма медленно работать, к чему такие извращения, не понятно.
Arigato вне форума Ответить с цитированием
Старый 15.04.2012, 03:59   #5
FoggySpurs
Пользователь
 
Регистрация: 14.04.2012
Сообщений: 41
По умолчанию

Почему-то выводит черный квадрат на экран((( В чем может быть дело? И как потом присвоить красной сотовляющей пикселя 0???

Последний раз редактировалось FoggySpurs; 15.04.2012 в 04:17.
FoggySpurs вне форума Ответить с цитированием
Старый 15.04.2012, 04:17   #6
Rin
Негодник
Форумчанин
 
Аватар для Rin
 
Регистрация: 10.11.2009
Сообщений: 880
По умолчанию

Прошу прощения Arigato, что поленился сам это написать. просто дополню чуть-чуть ваш код.
Цитата:
var Bm:TBitmap;
h,w:integre;
..........
Bm:=TBitmap.Create;
if fileexists('мой файл.bmp') then bm.loadfromfile('мой файл.bmp');
h:=bm.height;
w:=bm.width;

for y := h - 1 downto 0 do
for x := 0 to w- 1 do
begin
PaintBox1.Canvas.Pixels[x,y] := RGB(
0,
getGValue(Bm.Canvas.Pixels[x,y]),
getBValue(Bm.Canvas.Pixels[x,y]));
end;
Если помог, проси поставить минус. Будь оригинален!
Rin вне форума Ответить с цитированием
Старый 15.04.2012, 04:23   #7
FoggySpurs
Пользователь
 
Регистрация: 14.04.2012
Сообщений: 41
По умолчанию

Rin,тот же вопрос: почему я на выходе получаю не картинку ,а одноцветное изображение???
FoggySpurs вне форума Ответить с цитированием
Старый 15.04.2012, 04:31   #8
Rin
Негодник
Форумчанин
 
Аватар для Rin
 
Регистрация: 10.11.2009
Сообщений: 880
По умолчанию

Вы код то пробовали?
Если помог, проси поставить минус. Будь оригинален!
Rin вне форума Ответить с цитированием
Старый 15.04.2012, 04:32   #9
FoggySpurs
Пользователь
 
Регистрация: 14.04.2012
Сообщений: 41
По умолчанию

Да,конечно!
FoggySpurs вне форума Ответить с цитированием
Старый 15.04.2012, 04:37   #10
Rin
Негодник
Форумчанин
 
Аватар для Rin
 
Регистрация: 10.11.2009
Сообщений: 880
По умолчанию

Спецом, только ради Вас , открыл свою старенькую Delphi, и вкатал код.
Вот результат. Все это происходит на событии onPaint для PaintBox1.
Одноцветное изображение может получиться, если у вас есть цвета, образованные при смешении с красным. У меня на картинке есть желтый=красный+зеленый. При присваивании красному значение "нуль", мы получим зелёный.
А вот если бы я использовал градиент от синего до зелёного, то картинки на обоих PainBox`ах были бы одинаковые.
Изображения
Тип файла: jpg Безымянный.jpg (20.9 Кб, 150 просмотров)
Если помог, проси поставить минус. Будь оригинален!

Последний раз редактировалось Rin; 15.04.2012 в 04:40.
Rin вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как открыть файл из делфи? Izlom Помощь студентам 2 02.06.2010 13:19
как из делфи 7 открыть файл программой по умолчанию Alar Общие вопросы Delphi 1 21.01.2010 17:23
Сравнение попиксельно зоны рабочего стола с указанным *.bmp Travolta Общие вопросы .NET 1 02.12.2008 13:01
Как из .BMP считать попиксельно OrdJONY Мультимедиа в Delphi 7 17.08.2008 15:46
как открыть в делфи OpenOffice???? Gumaris Общие вопросы Delphi 2 06.12.2007 21:59