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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.10.2010, 16:13   #1
spamer
Software Developer
Старожил
 
Аватар для spamer
 
Регистрация: 19.12.2008
Сообщений: 2,070
По умолчанию Использование Copyrect в связке с TPngImage...?

Допустим есть вот такой код, вроде бы как и отрабатывает, но ничего не рисует на TImage:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  png: TPngImage;
  can: TPngImage;
begin
  png := TPngImage.Create;
  can := TPngImage.Create;
  png.LoadFromFile('MyImage.png');
  can.Draw(png.Canvas, Rect(0, 0, png.Width, png.Height));
  Image1.Canvas.Draw(0, 0, can);
end;
Что надо сделать - есть изображение PNG на котором имеются позиции кнопки, т.е. Normal, Move и Pressed. Хочу загрузить это изображение в некий буфер TPngImage и уже рисовать ту позицию, которая мне нужна. Думал сделать через Copyrect или Bitblt, но как оказалось с прозрачностью они не дружат...
Думал, что выше приведенный код будет нормально работать, но не тут то было...
Так вот, кто может чего посоветовать?
Будь проще и люди к тебе потянутся
spamer вне форума Ответить с цитированием
Старый 24.10.2010, 16:15   #2
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Image1.Width := png.Width;
Image1.Height := png.Height;

? или как там. Image.Bitmap.Width...
BOBAH13 вне форума Ответить с цитированием
Старый 24.10.2010, 22:34   #3
spamer
Software Developer
Старожил
 
Аватар для spamer
 
Регистрация: 19.12.2008
Сообщений: 2,070
По умолчанию

BOBAH13, все равно не работает. Просто TImage закрашивается белым цветом, а изображение не выводится. Может есть какой-то другой вариант решения данной проблемы?
з.ы. Хотя в теории должен и этот код работать...вроде бы...чего-то не понятно...

ДОБАВЛЕНО:
Вот нашел вроде то, что мне нужно - привожу сюда саму процедуру и ссылку на обсуждение:
Скопировать часть изображения, TPngObject.
Код:
Procedure CutPNG(Source: TPNGImage; OutPNG: TPNGImage; R: TRect);
Var
   i,xmax,ymax: integer;
   Inside: TPNGImage;
Begin
   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;
Будь проще и люди к тебе потянутся

Последний раз редактировалось spamer; 24.10.2010 в 23:25.
spamer вне форума Ответить с цитированием
Старый 25.10.2010, 09:23   #4
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

1. Лучше всего не связывать UI (TImage) с логикой программы (код)
2. Создайте отдельный, внутри функции, TBitmap, в нем отрисуйте все что надо
3. TImage.Picture := или Assign (вроде, Delphi уже давно не использую) и далее ваш временный TBitmap
4. TBitmap.Free();
BOBAH13 вне форума Ответить с цитированием
Старый 25.10.2010, 16:00   #5
spamer
Software Developer
Старожил
 
Аватар для spamer
 
Регистрация: 19.12.2008
Сообщений: 2,070
По умолчанию

BOBAH13, насчет гуи и логики - известно. На самом деле у меня есть несколько классов, которые ответственны за графику в программе (ибо приходится все самому рисовать...ну почти все)...вобщем между gui и логикой граница есть...
А вот код выше я привел просто что бы показать, что мне надо...ну что бы все полотно кода не выкладывать сюда...
Ай-ай-ай...точно, я про Assign() вовсе забыл, почему-то на Draw() зациклился был...
BOBAH13, еще раз спасибо, выручил...
Будь проще и люди к тебе потянутся
spamer вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
CopyRect, TBitmap и WebBrowser Nub Общие вопросы Delphi 1 05.10.2010 21:46
Изменить уровень прозрачности TPNGImage RidDozZ Мультимедиа в Delphi 1 28.05.2010 13:47
TGifImage TJpegImage TPngImage FantasyDD Компоненты Delphi 0 24.05.2010 15:41
Запутался с CopyRect Alex Cones Общие вопросы Delphi 2 01.12.2009 20:55
Поворот tPNGImage на нужный угол Altera Общие вопросы Delphi 3 08.09.2009 14:25