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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Копировать часть Png изображения в другой png, с сохранением прозрачности 
V
    Опции темы
Vaskevych
  Дата 14.3.2012, 23:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi Developer



Профиль
Группа: Участник
Сообщений: 43
Регистрация: 30.12.2009
Где: UA. Rovno

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



Помогите написать ф-ю для копирования одной части рисунка в другой новый файл при етом сохраняя прозрачность:

вот нашел такую ф-юю но она упрямо не хочет работать или я делаю че не так

Код

function CopyPNG(const PNG: TPNGObject; const R: TRect): TPNGObject; 
 Var 
   i, Xmax, Ymax: integer; 
 Begin 
   Xmax := R.Right-r.Left; 
   Ymax :=R.Bottom-r.Top; 
   Result := TPNGObject.CreateBlank(COLOR_RGBALPHA, 8, Xmax, Ymax); 
   BitBlt(Result.Canvas.Handle, 0, 0, Xmax, Ymax, PNG.Canvas.Handle, R.Left, R.Top, SRCCOPY); 
   For i := 0 to Ymax-1 do 
     CopyMemory(Result.AlphaScanline[i], pByte(dword(PNG.AlphaScanline[i+R.Top])+R.Left), Xmax); 
 End;


Здесь ветка на форуме Vingrad (Copy PNG)

Почему она не работает ???? 
PM   Вверх
MetalFan
Дата 15.3.2012, 11:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

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



Цитата(Vaskevych @  14.3.2012,  23:11 Найти цитируемый пост)
она упрямо не хочет работать или я делаю че не так

Какие симптомы? Возможно у исходного изображения нет альфаканала и код просто валится с AV.

Это сообщение отредактировал(а) MetalFan - 15.3.2012, 11:51


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
Vaskevych
  Дата 15.3.2012, 21:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi Developer



Профиль
Группа: Участник
Сообщений: 43
Регистрация: 30.12.2009
Где: UA. Rovno

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



Просто валится с AV, вообще блин афигеваю.
PM   Вверх
Vaskevych
  Дата 16.3.2012, 01:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi Developer



Профиль
Группа: Участник
Сообщений: 43
Регистрация: 30.12.2009
Где: UA. Rovno

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



Все наконецто розобрался просто надо принудительно добавить инфу о прозрачности


Код

Procedure CutPNG(Source: TPNGImage; OutPNG: TPNGImage; R: TRect);
Var
   i,xmax,ymax: integer;
   Inside: TPNGImage;
Begin
   Source.CreateAlpha;
   xmax := r.Right - r.Left;
   ymax := r.Bottom - r.Top;
   Inside := TPNGImage.CreateBlank(COLOR_RGBALPHA,8,xmax,ymax);
   BitBlt(Inside.Canvas.Handle,0,0,xmax,ymax,Source.Canvas.Handle,R.Left,R.Top,SRCCOPY);
   For i := 0 To ymax - 1 Do
      CopyMemory(Inside.AlphaScanline[i],pByte(dword(Source.AlphaScanline[i + R.Top]) + R.Left),xmax);
   OutPNG.Assign(Inside);
   FreeAndNil(Inside);
End;

PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

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

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

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


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

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


 




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


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

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