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

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

Вернуться   Форум программистов > Delphi программирование > Мультимедиа в Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 03.09.2010, 12:44   #1
alxd
Пользователь
 
Регистрация: 02.07.2009
Сообщений: 77
По умолчанию Проблема с bitmap (Delphi 7)

Столкнулся с совершенно неожиданной проблемой.
Нужно перенести изображение из буфера на bitmap. Делаю так

Код:
var
  pic: TPicture;
  clip: TClipboard;
  bitmap: TBitmap;
begin
  clip := TClipboard.Create;
  if clip.HasFormat(CF_PICTURE) then begin
    pic := TPicture.Create;
    pic.Assign(clip);
    // Сохраню для наглядности из TPicture
    pic.SaveToFile('C:\FromTPic.bmp');
    bitmap := TBitmap.Create;
    bitmap.Width := pic.Width;
    bitmap.Height := pic.Height;
    bitmap.Canvas.Draw(0,0,pic.Graphic);
    // Сохраню для наглядности из TBitmap
    bitmap.SaveToFile('C:\FromTBit.bmp');
    Image1.Picture := pic;
  end else
    ShowMessage('Нет изображения в буфере обмена!');
И в результате на изображении, полученном из bitmap видны дефекты.

Вопрос. Почему и как этого избежать?

P.S. Исходники и файл xls из которого копирую изображение в буфер прилагаются
Вложения
Тип файла: zip ClipbrdLine.zip (10.6 Кб, 15 просмотров)
alxd вне форума Ответить с цитированием
Старый 03.09.2010, 12:56   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Никогда такого не видел, но судя по всему дефекты эти связаны с тем как оффис работает.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 03.09.2010, 13:01   #3
alxd
Пользователь
 
Регистрация: 02.07.2009
Сообщений: 77
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
...но судя по всему дефекты эти связаны с тем как оффис работает.
Может быть, но факт остается фактом.

Может перенос изображения на bitmap надо способом отличным моего делать?

Код:
  bitmap := TBitmap.Create;
  bitmap.Width := pic.Width;
  bitmap.Height := pic.Height;
  bitmap.Canvas.Draw(0,0,pic.Graphic);
alxd вне форума Ответить с цитированием
Старый 03.09.2010, 13:31   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Я вообще пользуюсь функцией BitBlt для "переноса" изображений. Попробуй ее.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 03.09.2010, 14:05   #5
alxd
Пользователь
 
Регистрация: 02.07.2009
Сообщений: 77
По умолчанию

А примерчик можно?
alxd вне форума Ответить с цитированием
Старый 03.09.2010, 14:13   #6
alxd
Пользователь
 
Регистрация: 02.07.2009
Сообщений: 77
По умолчанию

Попробовал сделать так
Код:
resul := BitBlt(bitmap.Canvas.Handle, 0,0, pic.Height, pic.Width, pic.Bitmap.Canvas.Handle, 0, 0,SRCCOPY);
result = -1
Но весь холст bitmap теперь белый
alxd вне форума Ответить с цитированием
Старый 03.09.2010, 14:17   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Сам примерчик то дать не сложно:http://www.programmersforum.ru/showthread.php?t=7482

Но ты объясни зачем тебе Btmap раз Picture нормально работает?
Цитата:
Но весь холст bitmap теперь белый
Не морочь голову с Битмапом. pic.SaveToFile('C:\FromTPic.bmp'); и делов то
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 03.09.2010, 14:19   #8
alxd
Пользователь
 
Регистрация: 02.07.2009
Сообщений: 77
По умолчанию

Я потом bitmap активно использую, обрезаю, поворачиваю. Все написано и все работает. Загвоздка только вот в этом. Причем этот глюк проявляется только на маленьких изображениях типа 100x150 или около того

Цитата:
Сообщение от Stilet Посмотреть сообщение
Не морочь голову с Битмапом. pic.SaveToFile('C:\FromTPic.bmp'); и делов то
Да была мысль такая, с последующей загрузкой в битмап, только как-то не по-человечески это

Последний раз редактировалось Stilet; 03.09.2010 в 14:23.
alxd вне форума Ответить с цитированием
Старый 03.09.2010, 14:24   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Ты проверь ради интереса, это только в оффисе так клипбоард глюкает или вообще.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 03.09.2010, 14:27   #10
alxd
Пользователь
 
Регистрация: 02.07.2009
Сообщений: 77
По умолчанию

Проверил. Только в офисе. А у меня как раз с ним вся работа и идет
alxd вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Bitmap _-Re@l-_ Мультимедиа в Delphi 2 21.07.2010 19:08
Bitmap Delphi novi4ok_Delphi Помощь студентам 0 03.06.2010 13:52
из-за чего появляется полоса (на скрине) при вставке BitMap в TImage? - Проблема с Bitmap Grey@2009 Мультимедиа в Delphi 2 02.01.2010 20:23
RaveReports5 + Bitmap R11 Помощь студентам 0 22.12.2009 23:56
Bitmap? HunterMan Общие вопросы .NET 7 27.12.2008 19:02