Page 1 of 1
Sobre edición de fotografía
Posted: Wed Feb 15, 2006 10:01 am
by José Vicente Beltrán
Hola a todos,
necesito editar fotografias para ponerle texto en cualquier parte, en cualquier color o tamaño.
¿Se puede hacer?, en su caso, ¿un ejemplito?
Saludos
Re: Sobre edición de fotografía
Posted: Thu Feb 16, 2006 4:44 am
by fleal
Por si te sirve, yo uso este para poner las marca de agua
http://www.picture-shark.com/
Re: Sobre edición de fotografía
Posted: Thu Feb 16, 2006 9:16 am
by José Vicente Beltrán
Gracias por tu respuesta, pero lo que necesito es poder incluir un texto a una fotografía desde una aplicación FW, para integrarla dentro de otro sistema mas amplio que ya está funcionando.
Posted: Fri Feb 17, 2006 8:51 am
by Paco Garcia
Hola José
Prueba esto a ver si te vale
Code: Select all
#include "FiveWin.ch"
function Main()
local oWnd, oMenu
MENU oMenu
MENUITEM "Carga bmp" ACTION Carga( oWnd )
ENDMENU
DEFINE WINDOW oWnd MENU oMenu
ACTIVATE WINDOW oWnd
return nil
function carga( oWnd )
local cBmpFile := cGetFile( "*.bmp", "Please select a BMP file" )
local hDC, hDCMem, hOldBmp, hBmp
local hDib
if !file( cBmpFile )
? "No encuentro " + cBmpFile
return nil
endif
hDC := oWnd:GetDC()
hBmp := ReadBitmap( hDC, cBmpFile )
hDCMem := CreateCompatibleDC( hDC )
hOldBmp := SelectObject( hDCMem, hBmp )
TextOut( hDCMem, 10, 10, "Texto de prueba" )
SelectObject( hDCMem, hOldBmp )
DeleteObject( hDCMem )
oWnd:ReleaseDC()
hDib := DibFromBitmap( hBmp )
DibWrite( "test.bmp", hDib )
GloBalFree( hDib )
DeleteObject( hBmp )
return nil
#pragma BEGINDUMP
#include <windows.h>
#include <winuser.h>
#include "hbapi.h"
HB_FUNC( CREATECOMPATIBLEBITMAP )
{
hb_retnl( (LONG) CreateCompatibleBitmap( ( HDC ) hb_parnl( 1 ), hb_parni( 2 ), hb_parni( 3 ) ));
}
HB_FUNC( CREATECOMPATIBLEDC )
{
hb_retnl( (LONG) CreateCompatibleDC( ( HDC ) hb_parnl( 1 )));
}
#pragma ENDDUMP
Un saludo.
PD. Para utilizar otros formatos de imágenes ya postee un mensaje anteriormente con FreeImage.dll
Posted: Fri Feb 17, 2006 4:02 pm
by José Vicente Beltrán
Muchas gracias, Paco
me has dado algo para empezar ¡que no es poco!
saludos
Posted: Fri Feb 17, 2006 6:44 pm
by Paco Garcia
Por si necesitas:
Cambiar color de texto
Code: Select all
:
// rojo 0-255
// verde 0-255
// azul 0-255
nColor = SetTextColor( hDCMem, RGB( rojo, verde, azul ))
//.... funciones de pintar texto
SetTextColor( hDCMem, nColor )
Color de fondo de texto
Code: Select all
:
// rojo 0-255
// verde 0-255
// azul 0-255
nColor = SetBkColor( hDCMem, RGB( rojo, verde, azul ))
//.... funciones de pintar texto
SetBkColor( hDCMem, nColor )
Cambiar fuente
Code: Select all
:
DEFINE FONT oFont NAME ... SIZE...
hOldFont = SelectObject( hDCMem, oFont:hFont)
//.... funciones de pintar texto
SelectObject( hDCMem, hOldFont)
oFont:End()
Un abrazo
Posted: Fri Feb 17, 2006 6:58 pm
by José Vicente Beltrán
¿Como haces para leer el pensamiento?
En este momento estaba dandole vueltas precisamente a eso.
Gracias de nuevo!!!!!!!!!
Posted: Fri Feb 17, 2006 7:55 pm
by Marcelo Via Giglio
Paco,
hay alguna manera de hacer este cambio sobre el bmp, pero que este bmp este en un dialogo y en lugar de guardarlo en un archivo volverlo a poner al mismo bmp, es decir rediibujar el bmp con el cambio.
Un ejemplo, si tienes un bmp en un dialogo le haces un cuantos floofill (es decir lo cambias) y luego mueves el dialogo o pones una ventana sobre ell, _ desaparecen, entonces podriamos pensar en colocar en el ON PAINT algo que repinte para volver a obttener el bmp con _, pero esto dan resultados inesperados, por lo que hice fue hacer el cambio, guardalrlo a disco, recargar el bmp del archivo y lla tengo todo ok, pero no pude hacerlo sin utilizar un archivo temporal, claro no es mucho drama ello, pero tengo la curiosidad de como se podria hacer sin archivo temporal.
un saludo
Marcelo
Posted: Sat Feb 18, 2006 1:54 am
by Paco Garcia
Hola, realmente cuando pintas en el hBmp estas pintando sobre el bitmap. Supongo que te esta sucediendo esto porque cada vez que pintas vuelves a cargar el bitmap desde disco.
Prueba a cargarlo una sola vez y "matarlo" cuando termines de utilizarlo. De esta manera _ permaneceran.
En cuanto al
UNDO, (Por si las flais) se me ocurre que se puede ir salvando rectangulos de bitmap y guardandolos en un array anotando tambien las coordenadas de donde lo copiasteis.
Vamos, lo del UNDO es porque yo lo pediria, ya puestos...
Para salvar un rectangulo de bitmap:
seleccionamos el bitmap en un dispositivo de contexto de memoria
Code: Select all
hDCMem := CreateCompatibleDC( hDC )
hOldBmp := SelectObject( hDCMem, hBmp )
//creamos un bitmap en memoria del tamaño del rectángulo que queremos
hBmpMem := CreateCompatibleBitmap( hDC, aRect[4]-aRect[2], aRect[3]-aRect[1] )
//copiamos del bitmap inicial al destino el rectangulo que deseamos:
hDCMem2 := CreateCompatibleDC( hDC )
hOldBmp2 := SelectObject( hDCMem2, hBmpMem )
BitBlt( hDCMem2, 0, 0, aRect[4]-aRect[2], aRect[3]-aRect[1], hDCMem,
aRect[2], aRect[1], SRCCOPY ) //13369376
SelectObject( hDCMem2, hOldBmp2 )
SelectObject( hDCMem, hOldBmp )
DeleteDC( hDCMem2 )
DeleteDC( hDCMem )
En hBmpMem tenemos el trozo que _. Lo metemos en un array y listo.
Hay que acordarse al final de todo este invento, cuando matemos el bitmap original y ya no nos sirva el array de bitmaps, de hacer un DeleteObject( aUndos[n] )
DeleteObject( aUndos[n+1] )
etc...
Bueno creo que mas o menos esta es la idea. Acordaros de liberar siempre lo que pilleis antes.
Un saludo
Paco Garcia
Posted: Mon Feb 20, 2006 6:58 pm
by Marcelo Via Giglio
Paco,
gracias, lo probare
saludos
Marcelo