Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Копирование изображения в C#.net

5.9K
04 ноября 2004 года
OverseeR
8 / / 22.03.2004
Добрые сутки, уважаемые коллеги! =)
Столкнулся со следующей проблемой (а может быть и не проблемой вовсе): я создал компонент, прорисовка контента которого полностью реализована мной. Каким образом можно фрагмент изображения этого компонента скопировать (или сдвинуть) в другое место без перерисовки? Другими словами, мне нужно организовать скроллинг содержимого в окне компонента, т.е. изображение как бы сдвинуть на несколько пикселей вверх или вниз, а освободившееся пространство уже зарисовать "новой" инфой. Понятно, что можно организовать перерисовку всего содержимого, но есть ли более эффективный способ?
К примеру, в Builder есть замечательный метод для этого TCanvas->CopyRect(TRect SrcRect, TRect DestRect, TCanvas DestCanvas) - могу ошибаться в последовательности параметров, но это сейчас не суть. Так если ли что-нибудь подобное в C#.NET?
Заранее спасибо ;)
5.9K
05 ноября 2004 года
OverseeR
8 / / 22.03.2004
Так-с, кое что сам нашёл, но в API.

[DllImport(gdi32, EntryPoint = 'StretchBlt')]
function StretchBlt;

Вот её описание в MSDN:

StretchBlt
The StretchBlt function copies a bitmap from a source rectangle into a destination rectangle, stretching or compressing the bitmap to fit the dimensions of the destination rectangle, if necessary. The system stretches or compresses the bitmap according to the stretching mode currently set in the destination device context.

BOOL StretchBlt(
HDC hdcDest, // handle to destination DC
int nXOriginDest, // x-coord of destination upper-left corner
int nYOriginDest, // y-coord of destination upper-left corner
int nWidthDest, // width of destination rectangle
int nHeightDest, // height of destination rectangle
HDC hdcSrc, // handle to source DC
int nXOriginSrc, // x-coord of source upper-left corner
int nYOriginSrc, // y-coord of source upper-left corner
int nWidthSrc, // width of source rectangle
int nHeightSrc, // height of source rectangle
DWORD dwRop // raster operation code
);

И всё же - есть ли подобная функция не в виндовой API, а в самом FrameWork?
10
05 ноября 2004 года
Freeman
3.2K / / 06.03.2004
Цитата:
Originally posted by OverseeR
[DllImport(gdi32, EntryPoint = 'StretchBlt')]
function StretchBlt;


Хм, так CopyRect и есть VCL-обертка над StretchBlt...

5.9K
05 ноября 2004 года
OverseeR
8 / / 22.03.2004
Цитата:
Originally posted by smartsoft

Хм, так CopyRect и есть VCL-обертка над StretchBlt...


Хех, да, действительно - полез в исходники VCL, и впрямь CopyRect реализован через эту APIшную ф-цию. И всё же - есть ли другой способ, в классах FrameWork? API не хотелось бы применять, т.к. утрачивается кроссплатформенность...

319
05 ноября 2004 года
xelos
577 / / 27.02.2003
Цитата:
Originally posted by OverseeR

Хех, да, действительно - полез в исходники VCL, и впрямь CopyRect реализован через эту APIшную ф-цию. И всё же - есть ли другой способ, в классах FrameWork? API не хотелось бы применять, т.к. утрачивается кроссплатформенность...


рисуешь через контекст Graphics, я подозреваю?
Если так, то, имхо, надо копать в направлении методов Graphics. Есть объект Image, создаешь свой Graphics, а там что-нибудь через Graphics.DrawImage(Image, PointF);
.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог