Avatar billede runberg Nybegynder
28. oktober 2002 - 10:26 Der er 13 kommentarer og
2 løsninger

Tegning af en linie fra punkt A til B.

Hejsa

Jeg vil bare høre, om ikke der er nogen der kan hjælpe mig med at tegne en linie fra et punkt til et andet.

Jeg havde forestillet at det skulle ske ved brug af Pen, og så et graphics object, men jeg kan ikke få det til at fungere. Helst, skal det laves som en ascx fil, som så kan kaldes med de to punkter som parametre:

<myASP:drawline id="myLine" runat="server" punkt a="10,10" b="50,50" />

'Håber der er en der kan hjælpe mig!!
Avatar billede odegaard Nybegynder
28. oktober 2002 - 10:57 #1
Som jeg forstår dig ret, så vil du returnere et billede.
Så ville metoden være at indsætte et <img src="lavbillede.aspx"> i din side, og ikke som en control (ellers skal din control alligevel indsætte den tekst). Du skal jo tænke på at du blot genererer HTML-kode, hvor der peges på et link til et billede.
Hvordan laver du så den ASPX-fil som kan generere et billede?
Start med at kigge her: http://www.eksperten.dk/spm/250896
Avatar billede odegaard Nybegynder
28. oktober 2002 - 10:58 #2
...man kunne jo selvfølgelig lave noget javascript der gjorde det, men så er det den forkerte kategori :-)
Avatar billede runberg Nybegynder
28. oktober 2002 - 11:00 #3
Nej, den har du vist misforstået!!

Jeg ønsker at tegne en ganske almindelig streg vha. "drawline". Linien skal går mellem to punkter, som jeg definerer ud fra deres absolute placering. Linnien skal være sort, og være 1px bred!
Avatar billede odegaard Nybegynder
28. oktober 2002 - 11:06 #4
Ja det må jeg vist, for man kan da ikke bare tegne en linie midt i et HTML-dokument.
Drawline-metoden hører til graphics-objektet, og den benytter du når du ønsker at lave billeder. Billeder laver men ikke i HTML, så der er helt klart noget mukkent ved denne sag.
Gider du ikke uddybe, eller har du selv misforstået brugen af denne metode?
Linket jeg viste, giver et eksempel på brug af graphics-objektet, som du selv efterspørger.
Avatar billede runberg Nybegynder
28. oktober 2002 - 11:19 #5
Det er korrekt, at jeg ønsker at benytte graphics objektet. Formentlig noget i stil med myGraphics.drawline(myPen, pointA, pointB)

Problemet er bare, at jeg dels ikke har helt styr på ovenstående funktion, så et eksempel på brug af denne, med alle imports osv. ville være kanon.

Dernæst ønsker jeg at funktionen hives ud som en ascx-fil, da den skal bruges flere gange.. også på samme side.

Det jeg skal pruge det til er at lave et flowchart. HVert punkt i flowchartet er et panel, som indeholder de oplysninger, billeder med mere, som der skal være på hvert punkt. Disse punkter skal så forbindes med streger.
Det hele skal genereres dynamisk efter udtræk af en database.
Avatar billede odegaard Nybegynder
28. oktober 2002 - 11:32 #6
Jeg tror du helt misforstår hvad en user-control kan gøre for dig.
Du bliver stadig nødt til at lave et seperat script der genererer og returnerer et billede. Alt hvad din ascx-fil kan gøre, er at indsætte noget HTML-kode, og ønsker du et billede indsat, må du indsætte et link et (dynamisk genereret) billede.
En side kan ikke have to content-types. Enten returnerer du HTML-tekst eller også returnerer du et binært billede.

Linket til dit billede kan sagtens indeholde parametre. F.eks.
<img src="billede.aspx?p1=10,30&p2=30,20">

Du kan lave en ascx-fil der indsætter denne tekst, men så kan du vel lige så godt indsætte det direkte link til billedet.

Istedet for en webcontrol, skal du blot lave en aspx-fil. En aspx behøver ikke nødvendigvis at returnere en html-side. Hvis du nu gad se et kort sekund på eksemplet jeg refererer til, vil du se at jeg ændrer contenttype, og returnerer graphics-objektet b.
Avatar billede odegaard Nybegynder
28. oktober 2002 - 11:45 #7
Jeg har et lille eksempel her. Siden kaldes med to koordinater (jeg tester ikke for om parametrene er gyldige, så den crasher uden, men det må du rode med :-)
Ex:
http://localhost/showimage.aspx?p1=12,23&p2=300,200

------showimage.aspx------------
<%@ Page Language="vb" %> 
<%@ import namespace="system.drawing" %> 
<%@ import namespace="system.drawing.imaging" %> 
<%@ import namespace="system.drawing.drawing2d" %> 

<script language="vb" runat="server"> 

Public height as Integer = 300
Public width as Integer = 400
public b as New system.drawing.bitmap(width, height, pixelformat.Format16bppRgb555) 

Sub Page_load(obj as Object, E as EventArgs)
  ' Sæt content type 
    response.contenttype="image/Png" 

    dim g as graphics = graphics.fromimage(b) 

    Dim p1X As Integer = cInt(Split(Request.QueryString("p1"),",")(0))
    Dim p1Y As Integer = cInt(Split(Request.QueryString("p1"),",")(1))
    Dim p2X As Integer = cInt(Split(Request.QueryString("p2"),",")(0))
    Dim p2Y As Integer = cInt(Split(Request.QueryString("p2"),",")(1))
    DrawImage(p1X,p1Y,p2X,p2Y,g)
 

    Dim MS as System.IO.MemoryStream = new System.IO.MemoryStream()
    b.save(MS, imageformat.Png) 
    b.dispose() 

    Dim buffer as byte() = MS.ToArray()
    Response.OutputStream.Write(buffer,0,buffer.Length)
    Response.End()
End Sub 

Function DrawImage(p1X As Integer,p1Y As Integer,p2X As Integer,p2Y As Integer, g as Graphics)
  Dim pen as New pen(color.black,1) 
  Dim rec As New Rectangle(0,0,width-1,height-1) 'billede-område
  Dim lb as new LinearGradientBrush(rec, Color.SteelBlue,Color.White,LinearGradientMode.Vertical)

  g.clear(color.white) ' blank the image 
  g.smoothingMode = smoothingMode.antiAlias ' antialias objects 
  g.drawRectangle(pen,0,0,width-1,height-1)
  g.FillRectangle(lb,rec)                   
  g.drawRectangle(pen,rec)
  g.DrawLine(pen,p1X,p1Y,p2X,p2Y) 
End Function

</script>
Avatar billede odegaard Nybegynder
28. oktober 2002 - 12:03 #8
Nu jeg nærlæser dit problem, så tror jeg at du er på vej ud i noget rod. Tror du i det hele taget du er istand til at lave dette som en  statisk HTML-side, udelukkende ved brug af HTML og billeder?
Jeg har MEGET svært ved at se hvordan du vil lave grafik med absolutte positioner, på tværs af alle dine panels.

Hvis du vil have den kontrol du efterspørger, skal du enten ud i en ordentlig gang avanceret CSS og JS, eller også skal du lave hele dit flowchart som et billede eller PDF.
Avatar billede runberg Nybegynder
28. oktober 2002 - 12:21 #9
HVorfor gøre det så besværligt?????

Jeg har allerede på nuværende tidspunkt lavet en ascxfil, som indsætter et panel med en absolut position. Hvis det kan lade sig gøre, så må det da også kunne lade sig gøre, at lave en control (ascx-fil), som indsætter en streg med en absolut postition.... HVordan den control skal se ud, er det jeg ikke ved!!!

Ang. dit link, så får jeg nok ikke så meget ud af det, eftersom du linker til localhost!!!!

Dit eksempel. Både det her i dette spørgsmål, og det du linker til i et tidligere spørgsmål, ser meget fint ud, men det giver mig ikke rigtig noget overblik over hvordan pokker det løser mit problem
Avatar billede odegaard Nybegynder
28. oktober 2002 - 12:35 #10
Problemet er at dit Panel er HTML, og din streg er et binært billede med en udstrækning der svarer til et rektangel! Jeg forstår slet ikke hvorfor du ikke kan se denne åbenlyse forskel.

Mht. linket, så var det jo lissom meningen at du skulle copy/paste eksemplet til din egen server. Det var blot for at illustrere parametrene som eksemplet kræver.

Grunden til at ingen af mine eksempler løser dit problem, er at du tilsyneladende er kørt fast i en idé om hvordan du vil løse dit problem, helt uden at tage hensyn til hvad der er muligt i HTML. Det var derfor at jeg skrev om du i det hele taget kunne løse det med ganske almindeligt gammeldags HTML-kodning, uden scripts, controls, dynamik eller noget. For det er jeg efterhånden overbevist om at det kan du ikke, og dine frustrationer over det skinner kraftigt igennem.

Hvis jeg skulle lave et FlowChart, ville jeg lavet det som ét billede. Jeg er ked af det, men jeg tror ikke der er en lettere løsning. Under alle omstændigheder kommer det til at se godt ud :-)

Som jeg har sagt til folk her utallige gange før, som også var begyndt at fokusere på én bestemt (umulig) løsning: Prøv lige at tænke på om du ikke kan løse dit problem på en anden måde!

Det giver faktisk altid simplere, smartere og bedre løsninger.
Glem alt om at den sidste uges arbejde så er spildt arbejde. Det er det nok alligevel.

Og her er så et link du kan bruge, fordi jeg er så flink i dag:
http://www.iter.dk/drawimage.aspx?p1=12,23&p2=300,200

Som jeg ser det, så har jeg løst det problem du stiller.
Avatar billede runberg Nybegynder
28. oktober 2002 - 12:52 #11
Hvorfor du bliver ved med at snakke om statiske html sider forstår jeg simpelthen ikke. I mit eksempel er der tale om aspx filer, (ASP.NET), og det er der nu ikke meget statisk over.

Hvorvidt det er dig eller mig, der er låst fast på en ide er jeg ikke klar over, men jeg har endnu ikke fået at vide, hvorfor min ide ikke kan lade sig gøre. Som jeg har sagt tidligere. Hvis det kan lade sig gøre via en ascx-fil at indsætte et panel, med en brugerdefineret placering, så må det også kunne lade sig gøre, at lave en ascx-fil, der tegner en streg, og placerer denne med en absolut placering. Om ascx-filen så skal udarbejde et billede, det aner jeg ikke (det er her kernen i mit spørgsmål er), men det er jeg også ligeglad med, bare der bliver tegnet en streg, som jeg dynamisk kan placere på min side.

For at give dig en idé om hvad det er min plan, så kig lige på følgende udsnit fra en aspx-fil:

<%@ Page Language="VB" %>
<%@ Register TagPrefix="MYCONTROL" TagName="myPanel" Src="ascx\panel.ascx" %>
<script runat="server">

</script>
<html>
<head>
</head>
<body>
    <form runat="server">
        <MYCONTROL:myPanel id="testPanel" runat="server" marked="false" type="goods" link="http://www.etellerandet.com" name="Machine 44" ykon="440px" xkon="640px">
        </MYCONTROL:myPanel>
        <ASP:Label id="test" runat="server" />
    </form>
</body>
</html>

Denne side, kalder en ascx fil, som opretter et panel, med nogle forskellige atributter, og derefter placerer det på min side, ud fra den placering, som jeg har givet panelet med værdierne xkon og ykon.
Avatar billede runberg Nybegynder
28. oktober 2002 - 12:55 #12
Hvorvidt resultatet, bliver en ascx, eller en dll, kan i og for sig være ligegyldigt for mig. En funktion, som nemt kan kaldes, med de rette værdier, og så indsætte min streg på min side, vil også være fint nok, men helt hvordan det skal gøres aner jeg slet ikke.

Begynder at få en ide om det ved at kigge på dit eksempel, men hvis jeg skal kunne bruge det til noget, kan jeg så ikke logge dig til at simplificere det?? Som nævnt, skal jeg KUN have tegnet en streg fra a til b. Du jo også lige huske på at jeg kun er nybegynder!!!
Avatar billede runberg Nybegynder
28. oktober 2002 - 13:05 #13
Har kigget lidt yderligere på dit forslag, og begynder at få en ide om hvad det er du foreslår, man kunne gøre, for at løse problemet. Jeg kunne dog stadig godt tænke mig at få smit så meget af funktionaliteten ud i en dll eller en ascx, men lad os lade det ligge.
Jeg har prøvet at soretere det i mit tilfælde irelevante ud af dit kode-eksempel, og sat nogle spørgsmålstegn ud for de linier jeg ikke kan forstå. Måske du kan hjælpe mig med dem???

Her er det jeg er nået frem til:
----------------------------------
<%@ Page Language="vb" %> 
<%@ import namespace="system.drawing" %> 
<%@ import namespace="system.drawing.imaging" %> 
<%@ import namespace="system.drawing.drawing2d" %> 

<script language="vb" runat="server"> 

Private height as Integer
Private width as Integer

?  public b as New system.drawing.bitmap(p1x, p1y, p2x, p2y,  ????pixelformat.Format16bppRgb555) 

Sub Page_load(obj as Object, E as EventArgs)
  ' Sæt content type 
    response.contenttype="image/Png" 

    height = p2y - p1y
    width =  p2x -  p1x   

    dim g as graphics = graphics.fromimage(b) 

    DrawImage(p1X,p1Y,p2X,p2Y,g)

?    Dim MS as System.IO.MemoryStream = new System.IO.MemoryStream()
?    b.save(MS, imageformat.Png) 
?    b.dispose() 

?    Dim buffer as byte() = MS.ToArray()
?    Response.OutputStream.Write(buffer,0,buffer.Length)
?    Response.End()
End Sub 

Function DrawImage(p1X As Integer,p1Y As Integer,p2X As Integer,p2Y As Integer, g as Graphics)
  Dim pen as New pen(color.black,1) 
  g.DrawLine(pen,p1X,p1Y,p2X,p2Y) 
End Function

</script>

--------------

Bemærk, at jeg ønsker at kalde funktionen pageLoad (den skal have nyt navn, det ved jeg), med værdierne til palcering af linien. Ud fra disse punkter, bergener jeg højde og bredde på billedet.
Avatar billede odegaard Nybegynder
28. oktober 2002 - 17:38 #14
1. Du kan ikke bruge en usercontrol (ascx) til at tegne linjer PUNKTUM!
2. Grunden til at jeg snakker om statisk HTML, er for at simplificere din problemstilling. Hvis du kan vise mig en HTML-side, hvor resultatet er præsenteret som du ønsker det, så er alle problemer væk. Du skal jo huske at asp.net blot genererer HTML-kode, så hvis du ikke kan lave det med et par billeder og ren HTML, så kan du ved gud heller ikke lave det med ASP.NET.
Kan du vise mig en HTML-side hvor du har et eksempel-flowchart, så kan jeg hurtigt lave dig det kode du efterspørger, men kan du det? Og hvis du kan, så vil alle dine problemer være løst. Med andre ord, så er 95% af dit problem begrænsningen i HTML, og de resterende i at få genereret billedet og implementeret det.

Mht. dine spørgsmål:
>public b as New system.drawing.bitmap(p1x, p1y, p2x, p2y, pixelformat.Format16bppRgb555) 
Hvorfor har du lavet dette helt om? Du oprettet et billede-objekt som du ønsker at returnere til brugeren. Til dette ønsker du at angive en størrelse og antal farver som billedet understøtter. Jeg forstår ikke hvorfor du har indført p1x, p1y osv. Disse har du endda helt fjernet erklæringerne af, hvilket skulle få programmet til ikke at ville compile.

De resterende spørgsmålstegn handler om at omforme billede-objektet til en strøm af bytes som returneres til browseren, der tolker det som et billede. Dvs. du ønsker ikke at sende tekst retur, men her et binært billede.

Dette er mit endelige svar. Jeg kan ikke hjælpe folk der har så svært ved at lade sig blive hjulpet.
Kort og godt: Du er på helt på afveje, og jeg tror faktisk at du selv er ved at ane det.
Hvis du vil til at lære ASP.NET, så skulle du måske overveje at lægge ud med lidt simplere problemer. F.eks. HTML-kodning, StyleSheets og senere simple ASP.NET eksempler.
Avatar billede runberg Nybegynder
30. oktober 2002 - 10:00 #15
Tjaaa ... Det her bliver vi vist aldrig enige om, men fuck det, for jeg har fundet en løsning selv!!!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester