Canvas ! Canvas ! Como converter ...
Como converter um canvas em uma imagem bitmap .
Por exemplo, agente pega um TPaintBox e coloca no form. Nomeia-o ´Paint´ .
Aí colocao no OnMouseMove isso :
Paint.canvas.lineto(x,y) ;
Aí agente compila ( F9 ) passa o mouse naquela região e faz um traço .
Quero saber como eu faço para pegar o traçado daquela região e converter para um arquivo de bitmap ( .bmp ) .
Preciso de um código que seja colocado no botão ´ Salvar ´ que faça essa conversão !
Por exemplo, agente pega um TPaintBox e coloca no form. Nomeia-o ´Paint´ .
Aí colocao no OnMouseMove isso :
Paint.canvas.lineto(x,y) ;
Aí agente compila ( F9 ) passa o mouse naquela região e faz um traço .
Quero saber como eu faço para pegar o traçado daquela região e converter para um arquivo de bitmap ( .bmp ) .
Preciso de um código que seja colocado no botão ´ Salvar ´ que faça essa conversão !
Ronie
Curtidas 0
Respostas
Beppe
27/03/2004
Não testei:
A rotina acima copia um linha(reta, espessura 1px) de Source para Dest. No seu caso você terá que chamar a rotina para cada linha. Se vc estiver pintando como caneta, nem precisa usar essa rotina, basta ir copiando os pixels que passar. Usei Canvas.Pixels para simplificar, vc deve substituir por Scanline, ou então usar em bitmaps in-memory.
type TLineBltData = record Source, Dest: TBitmap; StartXY, EndXY, DestXY: TPoint; end; procedure LineBltCB(X, Y: Integer; const Data: TLineBltData); stdcall; begin with Data do Dest.Canvas.Pixels[DestXY.X + (X - StartXY.X), DestXY.Y + (Y - StartXY.Y)] := Source.Canvas.Pixels[X, Y]; end; procedure LineBlt(Source, Dest: TBitmap; StartXY, EndXY, DestXY: TPoint); stdcall; // importante: não mudar ordem, tipo ou modo dos parâmetros, ou convenção de chamada begin LineDDA(StartXY.X, StartXY.Y, EndXY.X, EndXY.Y, @LineBltCB, Integer(@Source)); end;
A rotina acima copia um linha(reta, espessura 1px) de Source para Dest. No seu caso você terá que chamar a rotina para cada linha. Se vc estiver pintando como caneta, nem precisa usar essa rotina, basta ir copiando os pixels que passar. Usei Canvas.Pixels para simplificar, vc deve substituir por Scanline, ou então usar em bitmaps in-memory.
LineBlt(Bmp1, Bmp2, StartPoint, Point(X, Y), Point(0, 0));
GOSTEI 0