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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Покрытие image 
:(
    Опции темы
SultanOFF
  Дата 22.2.2010, 14:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Здравствуйте. Пытаюсь покрыть image сеткой, делаю это так
Код

procedure TForm4.DrawVisor(_B_in: TBitmap; rect: trect);
const
  MaxPixelCountA = MaxInt div SizeOf(TRGBQuad);
type
  PRGBAArray = ^TRGBAArray;
  TRGBAArray = array[0..MaxPixelCountA-1] of TRGBQuad;
var i,ii,ix,iy,CenterPointY,CenterPointX:integer;
     RowOut: PRGBAArray;
begin
_B_in.Canvas.Pen.Width:=1;
_B_in.Canvas.Pen.Color:=rgb(0,20,0);
CenterPointX:=rect.Left+((rect.Right-rect.Left) div 2);
CenterPointY:=rect.Top+((rect.Bottom-rect.Top) div 2);
ix:=CenterPointX-(CenterPointX div 24)*24;
iy:=CenterPointY-(CenterPointY div 24)*24;
for i:=rect.Top to rect.Bottom-1 do  begin
  RowOut:=_B_in.ScanLine[i];
  for ii:=rect.Left to rect.Right-1 do begin
   if ((ii=(ii div 24)*24+ix))or((i=(i div 24)*24+iy)) then begin
    RowOut[ii].rgbBlue:=trunc(RowOut[ii].rgbBlue*0.8);
    RowOut[ii].rgbGreen:=trunc(RowOut[ii].rgbGreen*0.8);
    RowOut[ii].rgbRed:=trunc(RowOut[ii].rgbRed*0.8);
   end;
  end;
end;

end;
 Однако вылетает страшная ошибка. Причем в Вин7 ошибки не наблюдается, а в ХП присутсвует. Кто может подсказать из за чего это? Или может предложите свой способ покрытия image чем нибудь наподобии сетик? 
PM MAIL   Вверх
Bitter
Дата 22.2.2010, 19:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный лентяй
***


Профиль
Группа: Завсегдатай
Сообщений: 1209
Регистрация: 15.8.2004
Где: Харьков, Ukraine

Репутация: 6
Всего: 27



Хм... Наверно эта странная ошибка означает, что молоко на плите убежало.

Вообще мне всегда казалось, что записать в результат Scanline нельзя. Может я и ошибаюсь, но если я меняю 

RowOut[ii].rgbBlue:=trunc(RowOut[ii].rgbBlue*0.8);
RowOut[ii].rgbGreen:=trunc(RowOut[ii].rgbGreen*0.8);
RowOut[ii].rgbRed:=trunc(RowOut[ii].rgbRed*0.8);

на

Image1.Picture.Bitmap.Canvas.Pixels[ii,i]:=clRed;

то работает


Это сообщение отредактировал(а) Bitter - 22.2.2010, 19:19
PM MAIL ICQ Skype   Вверх
AntonN
Дата 22.2.2010, 21:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Во-первых скармливаемый битмап должен быть 32битный, второе - этот код рисует более темные линии путем затемнения каналов на 20% (мало ли, вдруг сразу непонятно было =) ).

Bitter, 
Цитата

Вообще мне всегда казалось, что записать в результат Scanline нельзя

иногда можно =)


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


Опытный лентяй
***


Профиль
Группа: Завсегдатай
Сообщений: 1209
Регистрация: 15.8.2004
Где: Харьков, Ukraine

Репутация: 6
Всего: 27



AntonN, иногда это как? А в AlphaScanline можно?
PM MAIL ICQ Skype   Вверх
x128
Дата 23.2.2010, 11:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



у битмапа PixelFormat должен быть pf32bit

Добавлено через 10 минут и 21 секунду
Цитата(Bitter @  23.2.2010,  11:25 Найти цитируемый пост)
иногда это как? А в AlphaScanline можно?

AlphaScanline относится к PNGObject, а так и то и другое это указатель на данные в памяти, соответственно по указателю можно читать и писать напрямую.
PM MAIL WWW   Вверх
AntonN
Дата 23.2.2010, 13:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Bitter, шучу smile
сканлайн, как уже написал x128, возвращает указатели на пиксели, доступ к ним из-за этого куда выше чем с canvas.pixels[].


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


Опытный лентяй
***


Профиль
Группа: Завсегдатай
Сообщений: 1209
Регистрация: 15.8.2004
Где: Харьков, Ukraine

Репутация: 6
Всего: 27



AntonN, хе... шутник. Доступ, конечно быстрее, это понятно. Простоя думал что он только для чтения. А чего ж тогда у автора не работает?
PM MAIL ICQ Skype   Вверх
SultanOFF
Дата 23.2.2010, 14:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата

А чего ж тогда у автора не работает?


Цитата

Во-первых скармливаемый битмап должен быть 32битный
 В этом и была вся загвоздка, у Меня битмап был 24битный. Теперь все ок пашет. Спасибо ребята ;) 
PM MAIL   Вверх
AntonN
Дата 23.2.2010, 16:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



я, кстати, чет не помню чтобы где-то выкладывал этот код...


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

Запрещено:

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

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

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

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


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

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


 




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


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

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