Sobre edición de fotografía

Sobre edición de fotografía

Postby José Vicente Beltrán » Wed Feb 15, 2006 10:01 am

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 :shock:
User avatar
José Vicente Beltrán
 
Posts: 282
Joined: Mon Oct 10, 2005 8:55 am
Location: Algeciras, España

Re: Sobre edición de fotografía

Postby fleal » Thu Feb 16, 2006 4:44 am

Por si te sirve, yo uso este para poner las marca de agua

http://www.picture-shark.com/
fleal
 
Posts: 234
Joined: Tue Oct 25, 2005 12:39 am
Location: México, DF

Re: Sobre edición de fotografía

Postby José Vicente Beltrán » Thu Feb 16, 2006 9:16 am

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.
User avatar
José Vicente Beltrán
 
Posts: 282
Joined: Mon Oct 10, 2005 8:55 am
Location: Algeciras, España

Postby Paco Garcia » Fri Feb 17, 2006 8:51 am

Hola José

Prueba esto a ver si te vale

Code: Select all  Expand view  RUN
#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
User avatar
Paco Garcia
 
Posts: 172
Joined: Fri Oct 07, 2005 12:00 pm

Postby José Vicente Beltrán » Fri Feb 17, 2006 4:02 pm

Muchas gracias, Paco

me has dado algo para empezar ¡que no es poco!

saludos :shock:
User avatar
José Vicente Beltrán
 
Posts: 282
Joined: Mon Oct 10, 2005 8:55 am
Location: Algeciras, España

Postby Paco Garcia » Fri Feb 17, 2006 6:44 pm

Por si necesitas:

Cambiar color de texto
Code: Select all  Expand view  RUN
:
// 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  Expand view  RUN
:
// 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  Expand view  RUN
:
DEFINE FONT oFont NAME ... SIZE...

hOldFont = SelectObject( hDCMem, oFont:hFont)

//.... funciones de pintar texto

SelectObject( hDCMem, hOldFont)
oFont:End()


Un abrazo
User avatar
Paco Garcia
 
Posts: 172
Joined: Fri Oct 07, 2005 12:00 pm

Postby José Vicente Beltrán » Fri Feb 17, 2006 6:58 pm

¿Como haces para leer el pensamiento?
En este momento estaba dandole vueltas precisamente a eso.

Gracias de nuevo!!!!!!!!! :shock:
User avatar
José Vicente Beltrán
 
Posts: 282
Joined: Mon Oct 10, 2005 8:55 am
Location: Algeciras, España

Postby Marcelo Via Giglio » Fri Feb 17, 2006 7:55 pm

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, los cambios desaparecen, entonces podriamos pensar en colocar en el ON PAINT algo que repinte para volver a obttener el bmp con los cambios, 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
Marcelo Via Giglio
 
Posts: 1065
Joined: Fri Oct 07, 2005 3:33 pm
Location: Cochabamba - Bolivia

Postby Paco Garcia » Sat Feb 18, 2006 1:54 am

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 los cambios 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... :D

Para salvar un rectangulo de bitmap:

seleccionamos el bitmap en un dispositivo de contexto de memoria

Code: Select all  Expand view  RUN
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 hemos capturado. 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
User avatar
Paco Garcia
 
Posts: 172
Joined: Fri Oct 07, 2005 12:00 pm

Postby Marcelo Via Giglio » Mon Feb 20, 2006 6:58 pm

Paco,

gracias, lo probare

saludos

Marcelo
Marcelo Via Giglio
 
Posts: 1065
Joined: Fri Oct 07, 2005 3:33 pm
Location: Cochabamba - Bolivia


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 61 guests

cron