Sobre edición de fotografía

Post Reply
User avatar
José Vicente Beltrán
Posts: 279
Joined: Mon Oct 10, 2005 8:55 am
Location: Algeciras, España
Contact:

Sobre edición de fotografía

Post 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 :shock:
fleal
Posts: 234
Joined: Tue Oct 25, 2005 12:39 am
Location: México, DF

Re: Sobre edición de fotografía

Post by fleal »

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

http://www.picture-shark.com/
User avatar
José Vicente Beltrán
Posts: 279
Joined: Mon Oct 10, 2005 8:55 am
Location: Algeciras, España
Contact:

Re: Sobre edición de fotografía

Post 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.
User avatar
Paco Garcia
Posts: 172
Joined: Fri Oct 07, 2005 12:00 pm
Contact:

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

Post by José Vicente Beltrán »

Muchas gracias, Paco

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

saludos :shock:
User avatar
Paco Garcia
Posts: 172
Joined: Fri Oct 07, 2005 12:00 pm
Contact:

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

Post by José Vicente Beltrán »

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

Gracias de nuevo!!!!!!!!! :shock:
Marcelo Via Giglio
Posts: 1033
Joined: Fri Oct 07, 2005 3:33 pm
Location: Cochabamba - Bolivia

Post 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
User avatar
Paco Garcia
Posts: 172
Joined: Fri Oct 07, 2005 12:00 pm
Contact:

Post 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... :D

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
Marcelo Via Giglio
Posts: 1033
Joined: Fri Oct 07, 2005 3:33 pm
Location: Cochabamba - Bolivia

Post by Marcelo Via Giglio »

Paco,

gracias, lo probare

saludos

Marcelo
Post Reply