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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> TPaintBox в TImage, как пробразовать 
V
    Опции темы
okamor71
Дата 14.11.2006, 18:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Помогите, а то горю надо содержимое с TPaintBox скопировать в TImage
PM MAIL ICQ   Вверх
Alexeis
Дата 14.11.2006, 18:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11740
Регистрация: 12.10.2005
Где: Зеленоград

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



image1.Canvas.CopyRect(PaintBox1.ClientRect, PaintBox1.Canvas, PaintBox1.ClientRect);


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
okamor71
Дата 14.11.2006, 18:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Ругается:
  Can only modify an image if it contains a bitmap.

Добавлено @ 18:55 
правда потом я этот TImage передаю в функцию

Код

function Square(Image: TImage):integer;
var
  x, y, i: integer;
begin
  i:=0;
  with Image.Canvas do begin
     y:=0;
     repeat
       x:=0;
       repeat
         if Image.Canvas.Pixels[x,y]=clBlack then
           inc(i);
         inc(x);
       until x>Image.Width;
       inc(y);
     until y>Image.Height;
  end;
  result:=i;
end;

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


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11740
Регистрация: 12.10.2005
Где: Зеленоград

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



Цитата(okamor71 @  14.11.2006,  18:49 Найти цитируемый пост)
Ругается:
  Can only modify an image if it contains a bitmap.

Странно... я только что этот код скомпилил и проверил. Все работает как часы.

okamor71, попробуй на чистом проекте, я думаю проблема на другом участке кода.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
okamor71
Дата 14.11.2006, 19:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



alexeis1, функция у меня в dll-ке, конекчусь к ней 

Код

function Square(Image: TImage): integer; external 'Diplom_lib.dll';


после чего вызываю

Код


tst: integer;

.....

  tst:=Square(Image2);


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


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11740
Регистрация: 12.10.2005
Где: Зеленоград

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



Цитата(okamor71 @  14.11.2006,  19:09 Найти цитируемый пост)
функция у меня в dll-ке, конекчусь к ней 

А ну тогда ясно. С дллкой уже были подобные проблемы. Возможно теряется графический дескриптор. Советую после передачи имаги вызвать. 
Image1.Invalidate();
а затем 
application.processmessages();

Первая функция укажет, что текущее изображение не действительно и требует перерисовки, а вторая заставит принудительно обработать все сообщения, в том числе и сообщение о перерисовке, и соответственно должен будет получен новый графический дескриптор.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
okamor71
Дата 14.11.2006, 20:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



alexeis1, весь прикол состоит в том что если использовать ее через библиотеку то кроем матом, а если в модуле то все нормально, и где копать немогу понять, в библиотеке только одна эта функция

Добавлено @ 20:46 
alexeis1, не рабатает  smile 
PM MAIL ICQ   Вверх
Alexeis
Дата 14.11.2006, 23:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11740
Регистрация: 12.10.2005
Где: Зеленоград

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



Из-за каких-то проблем с RTI, неправильно функционируют объекты VCL, но есть возможность передавать хендл виндового объекта например так.
Вот так выглядит проект
Код

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics,
  Controls, Forms, Dialogs, StdCtrls, ExtCtrls;

type
  TForm1 = class(TForm)
    Image1: TImage;
    Button1: TButton;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

function dosmf(bmp : hBitmap) : Integer; external 'dllka.dll';

procedure TForm1.FormCreate(Sender: TObject);
begin
  Image1.Picture.Bitmap.Width := 200;
  Image1.Picture.Bitmap.Height := 200;
  Image1.Picture.Bitmap.Canvas.Brush.Color := clGreen;
  Image1.Picture.Bitmap.Canvas.FillRect(Rect(0, 0, 100, 100));
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  ShowMessage(IntToStr(dosmf(Image1.Picture.Bitmap.Handle))) ;
end;

end.


Видно что параметр bmp : hBitmap

А вот так выглядит дллка

Код

library dllka;

uses
  FastShareMem, Windows, Classes, Graphics, ExtCtrls, Forms;

function dosmf(bmp : hBitmap) : Integer;
var
  tmp : TBitmap;
begin
  tmp        := TBitmap.Create;
  tmp.Handle := bmp;
  Result     := tmp.Canvas.Pixels[10, 10];
end;

exports dosmf;

begin

end.


Т.е. делфячий объект пересоздаем, но виндовый только устанавливаем.
tmp.Handle := bmp;


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Alexeis
Дата 15.11.2006, 11:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11740
Регистрация: 12.10.2005
Где: Зеленоград

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



После внимательного изучения вопроса, а пришел к выводу, о том, что данная проблема относится скорее к области системного программирования, а потому, для решения данного вопроса создана тема в разделе Delphi: WinAPI и системное программирование Приложене и DLL особенности их взаимодействия, Неверно функционируют компоненты



--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Snowy
Дата 15.11.2006, 12:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11360
Регистрация: 13.10.2004
Где: Питер

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



Нужно в dll передавать не TImage, а HDC.
И уже на него делать BitBlt.

Добавлено @ 12:49 
HDC брать в Image1.Picture.Bitmap.Canvas.Handle
PM MAIL   Вверх
Google
  Дата 6.12.2019, 11:28 (ссылка)  





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

Запрещено:

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

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

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

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


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

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


 




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


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

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