Модераторы: Snowy, Alexeis, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Пример из Delphi не работает?! 
:(
    Опции темы
Ofer
Дата 15.11.2008, 15:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 293
Регистрация: 15.10.2006
Где: КривбаСС

Репутация: нет
Всего: 5



Открыл делфийскую справку по функции ScanLine. Скопировал пример и тут началось. Во-первых, с png работать не хочет - получаю ошибку Bit image is not valid. Во-вторых, когда заменил png на bmp, теряю 1/3 картинки. Почему так? Как быть?
Код

procedure TForm1.Button1Click(Sender: TObject);

// This example shows drawing directly to the BitMap
var
  x,y : Integer;
  BitMap : TBitMap;
  P : PByteArray;
begin
  BitMap := TBitMap.create;
  try
    // On Windows replace MyBitmap.png with a full pathname such as
    // C:\Program Files\Common Files\Borland Shared\Images\Splash\256color\factory.bmp
    BitMap.LoadFromFile('MyBitmap.png');
    for y := 0 to BitMap.Height -1 do
    begin
      P := BitMap.ScanLine[y];

      for x := 0 to BitMap.Width -1 do
        P[x] := y;
    end;
    Canvas.Draw(0,0,BitMap);
  finally
    BitMap.Free;
  end;
end;



M
Alexeis
Модератор: Название темы должно отражать ее суть!

PM MAIL ICQ   Вверх
Данкинг
Дата 15.11.2008, 15:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: нет
Всего: 130



Цитата(Ofer @  15.11.2008,  15:04 Найти цитируемый пост)
Во-первых, с png работать не хочет - получаю ошибку Bit image is not valid.

А с чего вдруг вдруг TBitMap должен работать с PNG ?


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
Ofer
Дата 15.11.2008, 15:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 293
Регистрация: 15.10.2006
Где: КривбаСС

Репутация: нет
Всего: 5



Данкинг, меня тоже это удивило, но поверил разработчикам Delphi на слово. Это ведь не мой код, а скопированный из справки.
PM MAIL ICQ   Вверх
ivan219
  Дата 15.11.2008, 19:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1121
Регистрация: 19.11.2005
Где: Планета земля

Репутация: 4
Всего: 12



Код

var
  p: PByteArray;
.
.
.
.
.
   for x := 0 to BitMap.Width -1 do
    for y := 0 to BitMap.Height -1 do
     begin
      P := BitMap.ScanLine[y];
      P[x * 3] := 255; // цвет синий
      P[x * 3 + 1] := 255;// цвет зелёный
      P[x * 3 + 2] := 255;// цвет красный
     end;

PM MAIL ICQ   Вверх
AntonN
Дата 15.11.2008, 21:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 491
Регистрация: 8.8.2006

Репутация: 7
Всего: 18



ivan219,
пробег по высоте делается первым, потому как операция получения строки пикселов весьма ресурсоемкая задача.
причем пример зависит от дитности битмапа, работать будет только с pf24bit
Код

for y := 0 to BitMap.Height -1 do begin
     P := BitMap.ScanLine[y];
    for x := 0 to BitMap.Width -1 do   begin
      P[x * 3] := 255; // цвет синий
      P[x * 3 + 1] := 255;// цвет зелёный
      P[x * 3 + 2] := 255;// цвет красный
     end;
end;


тот же пример, но наверное удобнее smile

Код

const
  MaxPixelCountA = MaxInt div SizeOf(TRGBQuad);
type
  PRGBAArray = ^TRGBAArray;
  TRGBAArray = array[0..MaxPixelCountA-1] of TRGBQuad;

var bt:tbitmap;  x,y:Integer; RowOut:PRGBAArray;
begin
 for y:=0 to bt.Height-1 do begin
     RowOut:= bt.ScanLine[y];
    for x:=0 to bt.Width-1 do begin
       RowOut[x].rgbRed:=(255-RowOut[x].rgbRed);
       RowOut[x].rgbGreen:=255-RowOut[x].rgbGreen;
       RowOut[x].rgbBlue:=(255-RowOut[x].rgbBlue);
    end;
  end;
end;



PS. а png они разные бывают...

Это сообщение отредактировал(а) AntonN - 15.11.2008, 21:56


--------------------
user posted image
PM MAIL WWW   Вверх
Ofer
Дата 15.11.2008, 22:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 293
Регистрация: 15.10.2006
Где: КривбаСС

Репутация: нет
Всего: 5



ivan219, не пойму к чему это smile

AntonN, что-то с вашим кодом веселенькое изображение получаетсья ;)

Цитата(AntonN @  15.11.2008,  21:55 Найти цитируемый пост)
PS. а png они разные бывают...

Например?

Это сообщение отредактировал(а) Ofer - 15.11.2008, 22:20
PM MAIL ICQ   Вверх
AntonN
Дата 15.11.2008, 22:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 491
Регистрация: 8.8.2006

Репутация: 7
Всего: 18



Ofer, какая версия Дельфи? возможно в последних релизах и сделали поддержку png, мало ли...


--------------------
user posted image
PM MAIL WWW   Вверх
Ofer
Дата 15.11.2008, 22:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 293
Регистрация: 15.10.2006
Где: КривбаСС

Репутация: нет
Всего: 5



Delphi 7
PM MAIL ICQ   Вверх
AntonN
Дата 15.11.2008, 22:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 491
Регистрация: 8.8.2006

Репутация: 7
Всего: 18



да вообще там в комментарии не написано заменить путь на виндовс? smile


--------------------
user posted image
PM MAIL WWW   Вверх
Ofer
Дата 15.11.2008, 22:42 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 293
Регистрация: 15.10.2006
Где: КривбаСС

Репутация: нет
Всего: 5



Ну, там написано, чтоб заменить путь на существующий файл. Как я и поступил. Но с BMP все равно работет фигово :(
PM MAIL ICQ   Вверх
ivan219
Дата 16.11.2008, 13:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1121
Регистрация: 19.11.2005
Где: Планета земля

Репутация: 4
Всего: 12



Цитата(Ofer @  15.11.2008,  22:10 Найти цитируемый пост)
не пойму к чему это 

К вот этому:
Код

procedure TForm1.Button1Click(Sender: TObject);

// This example shows drawing directly to the BitMap
var
  x,y : Integer;
  BitMap : TBitMap;
  P : PByteArray;
begin
  BitMap := TBitMap.create;
  try
    // On Windows replace MyBitmap.png with a full pathname such as
    // C:\Program Files\Common Files\Borland Shared\Images\Splash\256color\factory.bmp
    BitMap.LoadFromFile('MyBitmap.png');
    for y := 0 to BitMap.Height -1 do
    begin
      P := BitMap.ScanLine[y];

      for x := 0 to BitMap.Width -1 do
        P[x] := y;
    end;
    Canvas.Draw(0,0,BitMap);
  finally
    BitMap.Free;
  end;
end;

AntonN, да немного ошибся.
Ofer, попробуй этот код:
Код

procedure TForm1.Button1Click(Sender: TObject);

// This example shows drawing directly to the BitMap
var
  x,y : Integer;
  BitMap : TBitMap;
  P : PByteArray;
begin
  BitMap := TBitMap.create;
  try
    // On Windows replace MyBitmap.png with a full pathname such as
    // C:\Program Files\Common Files\Borland Shared\Images\Splash\256color\factory.bmp
    BitMap.LoadFromFile('MyBitmap.png');
    for y := 0 to BitMap.Height -1 do begin
     P := BitMap.ScanLine[y];
    for x := 0 to BitMap.Width -1 do   begin
      P[x * 3] := 255; // цвет синий
      P[x * 3 + 1] := 255;// цвет зелёный
      P[x * 3 + 2] := 255;// цвет красный
     end;
end;
    Canvas.Draw(0,0,BitMap);
  finally
    BitMap.Free;
  end;
end;



PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Звук, графика и видео"
Girder
Snowy
Alexeis

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • По вопросам разработки игр стоит заглянуть сюда

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Girder, Snowy.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Звук, графика и видео | Следующая тема »


 




[ Время генерации скрипта: 0.0516 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.