Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.10.20;
Скачать: CL | DM;

Вниз

Как сделать 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 вся ветка

Текущий архив: 2003.10.20;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.012 c
6-65565
shark
2003-08-23 20:33
2003.10.20
работа с почтовым ящиком через Delphi


3-65379
GydruS
2003-09-25 02:32
2003.10.20
Здравствуйте! Тут мега проблема! F1! F1!


4-65682
Aleksandr
2003-08-01 17:11
2003.10.20
Объясните мне работу с TEvent ... и WaitForSingleObject


14-65609
ZeroDivide
2003-10-01 13:22
2003.10.20
Декомпилированный msblast


14-65575
Manfred
2003-10-02 15:42
2003.10.20
Лицензионные копии Delphi: сколько их?