Форум: "Media";
Текущий архив: 2003.10.20;
Скачать: [xml.tar.bz2];
ВнизКак сделать flip для Tbitmap Найти похожие ветки
← →
Oxy (2003-06-20 13:14) [0]Такая трабла. Есть TBitmap и мне надо сделать вертикальный или горизонтальный флип. Когда точно известно PixelFormat (например PixelFormat=pf24bit), то все без проблем. Я делаю прямой доступ к данным битмапы через scanline и копирую куда мне надо. Но я не знаю как быть когда PixelFormat=pfDevice. Тогда мне не известен размер элемента изображения (pixel) в байтах и не могу копировать.
Можно конечно через TBitmap.Canvas.Pixels, но там скорость вообще никакая. Но как то же эта ф-ция Pixels определяет откуда брать данные. Может есть какой то более быстрый способ доступа к битмапе или какой то способ определения формата пикселя?
← →
icWasya (2003-06-20 13:57) [1]ну дык явно установи, например
Image1.Picture.Bitmap.PixelFormat:=pf32bit;
и вперёд ...
← →
Oxy (2003-06-20 14:04) [2]Ты не понимаешь. Я использую TBitmap в компоненте. Я рисую на него, а потом копирую на канву компонента. Так же мне нужен flip этой битмапы в другом TBitmap и его я тоже копирую на канву компонента. И если я явно задам pf24bit, то в системе с 256 цветами получится что то ужасно уродливое.
← →
MBo (2003-06-20 14:11) [3]перевернуть картинку - StretchBlt с отрицательной высотой или шириной приемника (или TCanvas.StretchDraw)
А про шустрый доступ (но не c pfDevice) - в Статьи загляни
← →
Oxy (2003-06-20 14:28) [4]перевернуть картинку - StretchBlt с отрицательной высотой или шириной приемника (или TCanvas.StretchDraw)
А сделать flip справа на лево так можна?
А про шустрый доступ (но не c pfDevice) - в Статьи загляни
Это я и сам знаю. Мне бы именно с pfDevice
← →
cult (2003-06-20 14:32) [5]Если Win98 не принципиально - то можно пользоваться SetWorldTransform
← →
MBo (2003-06-20 14:43) [6]>А сделать flip справа на лево так можна?
ты внимательно прочитал ответ и хелп?
>именно с pfDevice
Get/SetBitmapBits
← →
Oxy (2003-06-20 15:10) [7]Ладно, попробовал я так.
StretchBlt(bmp2.Canvas.handle,
0,0,
bmp2.width, bmp2.height,
bmp1.Canvas.Handle,
0,0,
-bmp1.width, -bmp1.height,
SRCCOPY);
А в хелпе написано
StretchBlt creates a mirror image of a bitmap if the signs of the nWidthSrc and nWidthDest parameters or of the nHeightSrc and nHeightDest parameters differ. If nWidthSrc and nWidthDest have different signs, the function creates a mirror image of the bitmap along the x-axis. If nHeightSrc and nHeightDest have different signs, the function creates a mirror image of the bitmap along the y-axis.
И... ничего не работает. Может кинешь примерчик 100% рабочего кода?
← →
MBo (2003-06-20 15:19) [8]оно работает, только в невидимую область выводит ;))
смести нач. точку
← →
icWasya (2003-06-20 15:19) [9]не так
StretchBlt(bmp2.Canvas.handle,
0,0,
bmp2.width, bmp2.height,
bmp1.Canvas.Handle,
0,0,
-bmp1.width, -bmp1.height,
( bmp2.Canvas.handle,
0,0,
bmp2.width, bmp2.height,
bmp1.Canvas.Handle,
bmp1.width, bmp1.height,
0,0, SRCCOPY)не так
StretchBlt(bmp2.Canvas.handle,
0,0,
bmp2.width, bmp2.height,
bmp1.Canvas.Handle,
0,0,
-bmp1.width, -bmp1.height,
SRCCOPY);
а так
StretchBlt(bmp2.Canvas.handle,
0,0,
bmp2.width, bmp2.height,
bmp1.Canvas.Handle,
bmp1.width, bmp1.height,
0,0, SRCCOPY);
← →
Oxy (2003-06-20 15:25) [10]2 icWasya ©
Не работает оно и так. :-(
2 MBo ©
Дык как сместить?
Ну на моем примере можешь показать?
← →
MBo (2003-06-20 15:56) [11]StretchBlt(bmp2.Canvas.handle,
bmp2.width-1, bmp2.height-1,
-bmp2.width, -bmp2.height,
bmp1.Canvas.Handle,
0,0,
bmp1.width, bmp1.height,
SRCCOPY);
← →
Oxy (2003-06-20 16:33) [12]Ок, я уже тоже сделал. Но все равно спасибо.
Страницы: 1 вся ветка
Форум: "Media";
Текущий архив: 2003.10.20;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.008 c