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

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

Вернуться   Форум программистов > C/C++ программирование > C++ Builder
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.02.2010, 07:30   #1
Master07
 
Регистрация: 16.07.2009
Сообщений: 5
По умолчанию Проблема со StretchBlt в C++ Builder

Доброго времени суток.

Проблема такая. Имеется картинка в формате bmp, размер 4000*2500.
Задача вывести на канву Image сжатую копию bmp.
Делаю это следующим кодом:

Код:
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
	: TForm(Owner)
{
   HBITMAP memBM = (HBITMAP)LoadImage(0, "bitmap.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
   HDC memDC = CreateCompatibleDC(Form1->Image1->Canvas->Handle);
   SelectObject(memDC, memBM);
   SetStretchBltMode(Form1->Image1->Canvas->Handle, STRETCH_ANDSCANS);
   StretchBlt(Form1->Image1->Canvas->Handle,
      Form1->Image1->Left, Form1->Image1->Top,
      Form1->Image1->Width, Form1->Image1->Height,
      memDC,
      0, 0,
      4000, 2500,
      SRCCOPY);
   DeleteDC(memDC);
   DeleteObject(memBM);
}
//---------------------------------------------------------------------------
На первый взгляд всё делается нормально, однако, если приглядеться, то видно, что обрезаны края (правый и нижний), ровно по одному пикселу каждый.
Результат работы в архиве.
Пока что не могу разобраться, почему так происходит.
Подскажите, кто знает.
Вложения
Тип файла: zip bitmap.zip (53.5 Кб, 16 просмотров)
Master07 вне форума Ответить с цитированием
Старый 11.02.2010, 07:55   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Может из-за того что размер рисунка достаточно велик?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 11.02.2010, 09:37   #3
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Пробовали менять SetStretchBltMode его аргумент, например на HALFTONE (или вроде на COLORONCOLOR надо)
BOBAH13 вне форума Ответить с цитированием
Старый 11.02.2010, 11:32   #4
Master07
 
Регистрация: 16.07.2009
Сообщений: 5
По умолчанию

Пробовал, однако из этих всех методов устраивает лишь STRETCH_ANDSCANS. Также использовал gdiplus, но ни один из методов интерполяции, которые предоставляет эта библиотека, подобную картинку не дает.
Master07 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
AlphaBlend, StretchBlt - отказывается отрисовавывать HDC BOBAH13 Win Api 0 17.01.2010 18:42
Проблема с С++ Builder betterbetter C++ Builder 1 19.05.2009 16:05
Проблема с С++ Builder betterbetter C++ Builder 1 19.05.2009 11:38
Проблема с MaskEdit в C++ Builder Fe_DoS C++ Builder 1 03.04.2009 23:51
Проблема с C++ Builder 6 Kocapb Софт 0 18.11.2007 18:54